错误:PickerView“无法将类型'[String]'的返回表达式转换为返回类型'String?' ”

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

在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]

        }

我正在尝试创建一个UIPickerView,其中包含周,日和月的日期,例如,3月2日星期一

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

错误:无法将类型为'[String]'的返回表达式转换为返回类型'String?'

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

swift xcode datepicker uipickerview
3个回答
0
投票

首先,你使用了错误的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]
}

你的选择器看起来像:

enter image description here


0
投票

你有一份清单。

[] - >一个清单。

[[]] - >列表清单。

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

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

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


0
投票

你将返回Array = return pickerDate [row]的字符串,它应该是一个单独的字符串。

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