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?

编译时错误的截图

如果要符合这些协议,则需要实现UIPickerViewDataSourceUIPickerViewDelegate所有必需方法。

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:
我希望我的回答是有帮助的。