types“myViewController”不符合Swift中的协议UIPIckerDataSource
我只是在Swift中创build一个新类,它叫做myViewController
,它是一个UIViewController
。 现在我试图使它成为一个UIPickerViewDelegate和DataSource,但我得到了一个奇怪的错误
import UIKit class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { ... }
它说Type "myViewController" does not conform to protocol UIPIckerDataSource
通过UIPickerViewDataSource Type "myViewController" does not conform to protocol UIPIckerDataSource
。
这是一个错误的Xcode-Beta 3?
如果要符合这些协议,则需要实现UIPickerViewDataSource
和UIPickerViewDelegate
所有必需方法。
Swift在协议方面更像java,因为如果你没有实现协议声明的所有必需的方法,你将得到一个编译时错误,而不是运行时exception。
如果您使用的是Swift 3,修复它在XCode 8.1中插入下面方法的不赞成使用的版本:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return componentNumber }
在XCode 10.0+
func numberOfComponents(in pickerView: UIPickerView) -> Int { return componentNumber }
在文档中实现UIPickerDataSource
所需的方法。
数据源为select器视图提供组件数量和每个组件中的行数,用于显示select器视图数据。 这个协议中的两种方法都是必需的。
所以你需要实现这些方法
func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int {} func pickerView(_ pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int{}
我的问题是,我已经在实现函数的前面override
,其中Swift不认为协议方法实现是覆盖( 相同 )。 只是取出override
关键字解决了这个问题。
我的问题是协议的方法名称是非法的,
@protocol ContactsSelectDelegate <NSObject> - (void)selectContacts:(NSMutableArray *)contacts Tags:(NSMutableArray *)tags; @end
在这里, Tags:
应该是tags:
。
我希望我的回答是有帮助的。