类型“myViewController”不符合 Swift 中的 UIPIckerDataSource 协议
Posted
技术标签:
【中文标题】类型“myViewController”不符合 Swift 中的 UIPIckerDataSource 协议【英文标题】:Type "myViewController" does not conform to protocol UIPIckerDataSource in Swift 【发布时间】:2014-07-26 12:11:32 【问题描述】:我只是在 Swift 中创建了一个新类,它叫做myViewController
,它是一个UIViewController
。
现在我正在尝试将其设为 UIPickerViewDelegate 和 DataSource,但 我遇到了一个奇怪的错误
import UIKit
class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
...
它在 UIPickerViewDataSource 上显示 Type "myViewController" does not conform to protocol UIPIckerDataSource
。
是 Xcode-Beta 3 的错误吗?
【问题讨论】:
1) 请展示您如何实现所需的 UIPickerViewDataSource 方法。 - 2) 为什么“UIPIckerDataSource”中有错字?您是否复制/粘贴了错误消息? - 3) 当前版本是 Xcode 6 beta 4。 【参考方案1】:如果要符合这些协议,则需要实现UIPickerViewDataSource
和UIPickerViewDelegate
的所有必需方法。
Swift 在协议方面更像 java,因为如果您不实现协议声明的所有必需方法,您将收到编译时错误而不是运行时异常.
【讨论】:
为 UIPickerViewDataSource 获得相同的红色警告。 UIPickerViewDelegate 很好。一旦我添加 UIPickerViewDataSource 我就会收到错误消息。奇怪。 我遇到了同样的错误(运行 Xcode 6.1)为了“修复它”(因为它现在工作的意义是 0),我只是删除了 UIPickerViewDataSource 协议声明。然后将 self 设置为 dataSource,然后实现所需的 2 个委托方法。最后重新添加了协议声明。现在可以了! 世界上“最酷”的公司真的需要改进他们半熟的 IDE...对于一家“专注于卓越”的公司来说,太多的错误和奇怪的错误 你回答的第二段真的救了我的命!谢谢!【参考方案2】:如果您使用的是 Swift 3,XCode 8.1 中的 Fix-it 会插入以下方法的弃用版本:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
return componentNumber
在 XCode 10.0+ 中
func numberOfComponents(in pickerView: UIPickerView) -> Int
return componentNumber
【讨论】:
【参考方案3】:按照文档中的要求实现UIPickerDataSource
的方法。
数据源为选择器视图提供了数量 组件,以及每个组件中的行数,用于显示 选择器视图数据。 此协议中的两种方法都是必需的。
所以你需要实现这些方法
func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int
func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int
【讨论】:
【参考方案4】:我的问题是我在实现函数前面有override
,其中 Swift 不认为协议方法实现被覆盖 (same)。只需去掉 override
关键字即可解决问题。
【讨论】:
【参考方案5】:我的问题是协议的方法名不合法,
@protocol ContactsSelectDelegate <NSObject>
- (void)selectContacts:(NSMutableArray *)contacts Tags:(NSMutableArray *)tags;
@end
这里,Tags:
应该是 tags:
。
希望我的回答对你有帮助。
【讨论】:
以上是关于类型“myViewController”不符合 Swift 中的 UIPIckerDataSource 协议的主要内容,如果未能解决你的问题,请参考以下文章
原因:不存在类型变量 T 的实例,因此 void 符合使用 mockito
不存在类型变量 T 的实例,因此 List<T> 符合 Integer