UIPickerView Swift 5的语法问题

问题描述 投票:0回答:1

我一直在研究创建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]
    }
}
swift uipickerview
1个回答
0
投票
  1. 关于“不符合协议”警告,这是因为协议具有某些必需的方法。如果点击警告,它将为您提供添加方法“存根”的机会: enter image description here 如果您选择“修复”选项,它将添加缺少必需的UIPickerViewDataSource委托方法: enter image description here 您显然必须编写这些方法的代码,但它会准确地向您显示缺少哪些方法以及您必须执行的操作。 注意,它是numberOfComponents(in:),而不是numberOfComponentsInPickerView(pickerView:)。您所拥有的似乎是旧的Swift 2语法。
  2. 关于“近似匹配可选要求”警告: titleForRowdidSelectRow都缺少_ argument label作为第一个参数。他们分别是: func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { ... } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { ... }` 请注意_参数标签,就像你对numberOfRowsInComponent一样。 每当您看到这样的警告时,请仔细查看相关协议的文档(本例中为UIPickerViewDelegate)。 通常,如果您点击警告,它甚至会让您选择让Xcode为您修复方法签名。选择“......以满足此要求”的选项,而不是选择“...以消除此警告”: satisfy this requirement

最重要的是,每当您看到有关缺少协议要求和/或“几乎匹配”警告的警告时,请尝试编译器建议的修复和/或仔细检查协议文档。

© www.soinside.com 2019 - 2024. All rights reserved.