繁体   English   中英

类型“myViewController”不符合Swift中的协议UIPIckerDataSource

[英]Type “myViewController” does not conform to protocol UIPIckerDataSource in Swift

我只是在Swift中创建一个新类,它叫做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,因为如果你没有实现协议声明的所有必需方法,你将得到编译时错误而不是运行时异常。

如果您正在使用Swift 3,则在XCode 8.1中修复它会插入以下方法的弃用版本:

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return componentNumber
}

在XCode 10.0+中

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return componentNumber
}

在文档中实现UIPickerDataSource所需的方法。

数据源为选择器视图提供组件数量和每个组件中的行数,以显示选取器视图数据。 该协议中的两种方法都是必需的。

所以你需要实现这些方法

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM