UIPickerView не показывает правильно рассчитанные значения - PullRequest
0 голосов
/ 31 января 2019

Я делаю вид сборщика, чтобы отобразить диапазон возрастов для выбора пользователями.

Возрастные диапазоны:

  • от 1 до 24 месяцев

  • от 3 до 17 лет

У меня уже есть вся логика и модель, и приложение работает.От 1 до 24 месяцев отображается правильно, но значения, отображаемые в диапазоне лет, отображаются неправильно.Он показывает «3 года» для большинства разделов и «4 года» для последних трех рядов.Вот мой код:

По какой-то причине для двух других утверждений 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 ""
}

1 Ответ

0 голосов
/ 31 января 2019

Похоже, что в последнем предложении 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"
    }
...