【问题标题】:Error: PickerView " cannot convert return expression of type '[String]' to return type 'String?' "错误:PickerView“无法将类型“[String]”的返回表达式转换为返回类型“String?” "
【发布时间】:2019-03-13 11:23:02
【问题描述】:

在 Xcode Swift 中使用 PickerView 得到此代码中的错误:

func pickerView(pikcerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    return pickerDate [row] // Cannot convert return expression of type '[String]' to return type 'String?'

        }

PickerView 的完整代码:

@IBOutlet weak var inputpickerdate: UIPickerView!

   // var pickerList = ["test","test2","test3"]

    var pickerDate: [[String]] = [[String]] ()
        //[pickerModel] ()

    var selected: String?

    override func viewDidLoad() {
        super.viewDidLoad()

    self.inputpickerdate.delegate = self
    self.inputpickerdate.dataSource = self

        pickerDate = [["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"], ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"]]


 func numberOfComponents(in pickerView: UIPickerView) -> Int {

        return 3
    }


func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    return pickerDate.count
        }
func pickerView(pikcerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    return pickerDate [row]

        }

我正在尝试使用星期几、星期几和月份创建一个 PickerView,例如,3 月 2 日星期一

但是,我已经这样做并获得了

错误:无法将“[String]”类型的返回表达式转换为返回 输入“字符串?”

在我的func titleForRow 中,不知道为什么我会收到这个。

【问题讨论】:

    标签: swift xcode datepicker uipickerview


    【解决方案1】:

    首先,您使用了错误的titleForRow 委托方法。应该是:

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    

    接下来你需要更换

    return pickerDate [row]
    

    return pickerDate[component][row]
    

    你的方法是:

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pickerDate[component][row]
    }
    

    你的选择器看起来像:

    【讨论】:

    • 乐于提供帮助,如果对您有帮助,请不要忘记将答案标记为正确。
    • 不,你没有.. :)
    • 遗憾的是现在出现错误 - 线程 1:致命错误:索引超出范围 - 有什么想法吗?
    • 这是因为您试图访问数组中不存在的索引。
    【解决方案2】:

    你有一个列表。

    [] -> 一个列表。

    [[]] -> 列表列表。

    您返回的是[] 列表,而不是String?。 在你的情况下,你必须使用这样的东西:

    func pickerView(pikcerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pickerDate[component][row] // if component starts with 0.
    }
    

    当然,你必须制定一个逻辑来获得正确的字段。

    【讨论】:

      【解决方案3】:

      您正在返回 Array = return pickerDate [row] 的字符串,它应该是一个字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-24
        • 2016-09-27
        • 1970-01-01
        • 2012-08-13
        • 1970-01-01
        • 2021-01-18
        • 2023-03-12
        相关资源
        最近更新 更多