Ошибка: PickerView "не может преобразовать возвращаемое выражение типа '[String]' в тип возвращаемого значения" String? "" - PullRequest
0 голосов
/ 13 марта 2019

Используя PickerView в Xcode Swift, получаю ошибку в этом коде:

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 с датойнедели, дня и месяца, например, понедельник, 2 марта

Однако я сделал это так и получил ошибку

: невозможно преобразовать возвращаемое выражениевведите '[String]' для возврата типа 'String?'

в моем func titleForRow и не знаете, почему я это получаю.

Ответы [ 3 ]

0 голосов
/ 13 марта 2019

Прежде всего, вы используете неправильный 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 голосов
/ 13 марта 2019

вы возвращаете строку Array = return pickerDate [row], где она должна быть одной строкой.

0 голосов
/ 13 марта 2019

У вас есть список списка.

[] -> список.

[[]] -> список списка.

Вы возвращаетесписок [] вместо String?.В вашем случае вы должны использовать что-то вроде этого:

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

Конечно, вы должны создать логику, чтобы получить правильное поле.

...