UIPickerView 未正确显示计算值

UIPickerView not showing calculated values correctly

我正在制作一个选择器视图,以显示供用户选择的年龄范围。

年龄范围是:

我已经完成了所有的逻辑和模型,并且应用程序运行了。 1 到 24 个月显示正确,但年份范围内显示的值显示不正确。大多数部分显示“3 岁”,最后三行显示“4 岁”。这是我的代码:

出于某种原因,对于这两个 else if 语句,我得到了一个错误,我必须强制解包这些值(如果有人能解释那会很棒)。第三个 if 语句的问题在于值。

型号

struct Age {
var ageMonths: String

static var all: [Age] {
    var ageArray = [Age]()
    for months in 1...24 { // adds months 1 through 24
        ageArray.append(Age(ageMonths: String(months)))
    }
    for months in Array(stride(from: 36, through: 204, by: 12)) { // adds years 3 through 17
        ageArray.append(Age(ageMonths: String(months)))
    }
    return ageArray
    }
}

视图控制器

var age: Age?

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

        if Int(Age.all[row].ageMonths) == 1 {
            return Age.all[row].ageMonths + " month old"
        } else if Int(Age.all[row].ageMonths)! > 1 && Int(Age.all[row].ageMonths)! < 36 {
            return Age.all[row].ageMonths + " months old"
        } else if Int(Age.all[row].ageMonths)! >= 36 {
            return Age.all[row/12].ageMonths + " years old"
        }

    return ""
}

看起来你只是在最后一个 if 子句中有错别字

    if Int(Age.all[row].ageMonths)! >= 36 {
        return Age.all[row/12].ageMonths + " years old"
    }

但它应该是这样的(语法可能很粗略,我只是在回忆)

    if Int(Age.all[row].ageMonths)! >= 36 {
          let years: Float = Int(Age.all[row].ageMonths)/12
          return "\(years) years old"
    }