我一直在研究创建UIPickerView的各种方法,每次遇到相同的问题:
我得到了错误:
类型'timeselectviewController‘不符合协议'UIPickerViewDataSource’
pickerView函数总是收到警告:
实例方法'pickerView(pickerView:titleForRow:forComponent:)‘几乎匹配协议'UIPickerViewDelegate’的可选需求'pickerView(_:titleForRow:forComponent:)‘
,这是目前为止的代码:
import UIKit
class timeselectviewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var gradeTextField: UITextField!
var gradePicker: UIPickerView!
let gradePickerValues = ["5. Klasse", "6. Klasse", "7. Klasse"]
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return gradePickerValues.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return gradePickerValues[row]
}
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int){
gradeTextField.text = gradePickerValues[row]
self.view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()
gradePicker = UIPickerView()
gradePicker.dataSource = self
gradePicker.delegate = self
gradeTextField.inputView = gradePicker
gradeTextField.text = gradePickerValues[0]
}
}发布于 2019-04-19 22:31:26

如果选择“fix”选项,它将添加缺少的必需UIPickerViewDataSource委托方法:

显然,您必须为这些方法编写代码,但它将准确地显示缺少哪些方法以及您必须做什么。
注意,这是numberOfComponents(in:),而不是numberOfComponentsInPickerView(pickerView:)。您所拥有的似乎是旧的Swift 2语法。
titleForRow和didSelectRow都缺少第一个参数的_ 参数标号。它们分别是:
func pickerView(_ pickerView: UIPickerView,titleForRow行: Int,forComponent组件: Int) ->字符串?{.}
和
func pickerView(_ pickerView: UIPickerView,didSelectRow行: Int,inComponent component: Int) {.
通常,如果您点击警告,它甚至会给您一个选项,让Xcode修复您的方法签名。选择“.”选项。为了满足这个要求“,而不是说”.若要使此警告保持沉默“:
总之,每当您看到有关缺少协议要求和/或“几乎匹配”警告的警告时,要么尝试编译器建议的修补程序,要么重新检查协议文档。
https://stackoverflow.com/questions/55767816
复制相似问题