我只是在Swift中创建一个新类,它被称为myViewController
并且它是UIViewController
。
现在我试图让它成为UIPickerViewDelegate和DataSource,但我得到了一个奇怪的错误
import UIKit
class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
...
}
它在UIPickerViewDataSource上显示Type "myViewController" does not conform to protocol UIPIckerDataSource
。
这是Xcode-Beta 3的错误吗?
答案 0 :(得分:55)
如果您想要符合这些协议,则需要实现UIPickerViewDataSource
和UIPickerViewDelegate
所需的所有方法。
当谈到协议时,Swift更像java,因为如果你没有实现协议声明的所有必需方法,你将得到编译时错误而不是运行时异常
答案 1 :(得分:15)
如果您正在使用Swift 3,则在XCode 8.1中修复它会插入以下方法的弃用版本:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return componentNumber
}
在XCode 10.0+
中func numberOfComponents(in pickerView: UIPickerView) -> Int {
return componentNumber
}
答案 2 :(得分:11)
在文档中实现UIPickerDataSource
所需的方法。
数据源为选择器视图提供了数量 用于显示的组件和每个组件中的行数 选择器视图数据。 此协议中的两种方法都是必需的。
所以你需要实现这些方法
func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int {}
func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int{}
答案 3 :(得分:0)
我的问题是我在实现函数前面有override
,其中Swift并不认为协议方法实现是覆盖(same)。只需取出override
关键字即可解决问题。
答案 4 :(得分:0)
我的问题是协议的方法名称是非法的,
@protocol ContactsSelectDelegate <NSObject>
- (void)selectContacts:(NSMutableArray *)contacts Tags:(NSMutableArray *)tags;
@end
此处Tags:
应为tags:
我希望我的回答很有帮助。