Возврат отсутствует из этой функции? - PullRequest
0 голосов
/ 21 марта 2020

Я получаю эту ошибку "Missing return in a function expected to return 'NSAttributedString? '"

Может кто-нибудь помочь? Я бью свой маленький мозг - склонный к идиотским ошибкам - из-за этого. Я вставил строку "dummyString", чтобы убедиться, что был возврат, но не повезло.

TIA

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

    let dummyString = "Dummy String"


    if component == 1 {
        return NSAttributedString(string: denomArray[row], attributes: [NSAttributedString.Key.foregroundColor: UIColor.yellow])

    }else if component == 0 {
        if issuerArray [row] == "US" {
            return NSAttributedString(string: self.issuerArray[row], attributes: [NSAttributedString.Key.foregroundColor: BaseViewController.Flag.us.themeColor])
        }
        if issuerArray [row] == "Canada" {
            return NSAttributedString(string: self.issuerArray[row], attributes: [NSAttributedString.Key.foregroundColor: BaseViewController.Flag.canada.themeColor])
        }

    }else{
        return NSAttributedString(string: dummyString, attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])

    }
}

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

Проблема в конструкции вашего if component == 0 блока. Если страна не является ни США, ни Канадой, возврата нет. Вы можете знать, что строка может содержать только одно из этих двух значений, но компилятор этого не делает.

Самое простое решение - сделать значение по умолчанию return безусловным. Таким образом, если предыдущий return не был выполнен, вы вернете значение по умолчанию.

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

    let dummyString = "Dummy String"

    if component == 1 {
        return NSAttributedString(string: denomArray[row], attributes: [NSAttributedString.Key.foregroundColor: UIColor.yellow])

    } else if component == 0 {
        if issuerArray [row] == "US" {
            return NSAttributedString(string: self.issuerArray[row], attributes: [NSAttributedString.Key.foregroundColor: BaseViewController.Flag.us.themeColor])
        }
        if issuerArray [row] == "Canada" {
            return NSAttributedString(string: self.issuerArray[row], attributes: [NSAttributedString.Key.foregroundColor: BaseViewController.Flag.canada.themeColor])
        }
    }
    return NSAttributedString(string: dummyString, attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])

}
1 голос
/ 21 марта 2020

Вам просто нужно добавить return nil над последней строкой.

...