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

r4i*_*id4 39 xcode uipickerviewcontroller ios uipickerviewdatasource swift

我只是在Swift中创建一个新类,它被调用myViewController,它是一个UIViewController.现在我试图让它成为UIPickerViewDelegate和DataSource,但我得到了一个奇怪的错误

import UIKit

class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
   ...
}
Run Code Online (Sandbox Code Playgroud)

Type "myViewController" does not conform to protocol UIPIckerDataSource通过UIPickerViewDataSource 说.

这是Xcode-Beta 3的错误吗?

编译时错误的屏幕截图

sal*_*140 55

你需要实现所有所需的方法UIPickerViewDataSourceUIPickerViewDelegate,如果你要遵守这些协议.

当谈到协议时,Swift更像java,因为如果你没有实现协议声明的所有必需方法,你将得到编译时错误而不是运行时异常.

  • 世界上"最酷"的公司确实需要改进他们的半coocked IDE ...对于"专注于卓越"的公司来说,有太多的错误和奇怪的错误 (5认同)

off*_*one 15

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

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return componentNumber
}
Run Code Online (Sandbox Code Playgroud)

在XCode 10.0+中

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return componentNumber
}
Run Code Online (Sandbox Code Playgroud)


cod*_*ter 11

实现UIPickerDataSource文档中所需的方法.

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

所以你需要实现这些方法

func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int {}

   func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int{}
Run Code Online (Sandbox Code Playgroud)