swift - UIPickerView Swift 5 的语法问题
问题描述
我一直在研究创建 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]
}
}
解决方案
关于“不符合协议”的警告,那是因为协议有某些必需的方法。如果您点击警告,它将为您提供添加方法“存根”的机会:
如果您选择“修复”选项,它将添加缺少的必需
UIPickerViewDataSource
委托方法:您显然必须为这些方法编写代码,但它会准确地告诉您缺少哪些方法以及您必须做什么。
注意,是
numberOfComponents(in:)
,不是numberOfComponentsInPickerView(pickerView:)
。你所拥有的似乎是旧的 Swift 2 语法。关于“几乎匹配可选要求”警告:
两者
titleForRow
都didSelectRow
缺少第一个参数的_
参数标签。它们分别是:func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { ... }
和
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { ... }`
请注意
_
参数标签,就像您对numberOfRowsInComponent
.每当您看到这样的警告时,请仔细查看相关协议的文档(
UIPickerViewDelegate
在这种情况下)。通常,如果您点击警告,它甚至会为您提供让 Xcode 为您修复方法签名的选项。选择“...以满足此要求”的选项,而不是“...使此警告静音”的选项:
最重要的是,每当您看到有关缺少协议要求和/或“几乎匹配”警告的警告时,请尝试编译器建议的修复和/或仔细检查协议文档。
推荐阅读
- r - r中的ggplot中的双y轴(条形和线形)
- c# - 事件选项卡未显示在诊断工具 VS 2017 中
- python-2.7 - 为什么 2.0 不能满足要求?
- flutter - 如何更改颤动应用程序键盘颜色?
- xcode11 - Swift Package Manager 与哪些 iOS 版本兼容?
- jquery - 如何为特定组件加载 slick-carousel 文件
- javascript - 如何在javascript中控制图像
- mergesort - 在 python 中实现合并排序时得到了错误的答案
- python - AttributeError:模块“张量板”没有属性“懒惰”
- php - 在多个 PHP 脚本中引用连接文件