类型“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】:

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

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

类型“String.Index”不符合协议“IntegerLiteralConvertible”

不可不会的scala隐式转换

Scala语法基础之隐式转换

从另一个 .storyboard 扩展 MyViewController