Формы Swift Eureka - Как назначить значения для параметров поля?

Если я создаю поле сегментированной строки, например, так:

<<< SegmentedRow<String>(){ row in
    row.title = "Sex"
    row.tag = "sex"
    row.selectorTitle = "Select your sex"
    row.options = ["Male","Female"]
}

Как мне сопоставить параметры с определенным значением? Например, если пользователь выбирает Мужской, есть ли способ получить M вместо Male в коде, но все еще показывает Male Пользователю?

Или, если у меня есть список стран, например:

<<< PushRow<String>(){ row in
  row.title = "Passport Issuing Country"
  row.tag = "passportIssuingCountry"
  row.selectorTitle = "Passport Issuing Country"
  row.options = ["AUSTRALIA","AUSTRIA","BELGIUM"]
}

можно ли присвоить каждому названию страны код страны, например AUSTRALIA вернусь AU, AUSTRIA вернусь AT, так далее.

1 ответ

Решение

Прямо сейчас нет способа сохранить внутреннее значение для опции, но это то, что вы можете сделать:

1. Создайте перечисление со всеми доступными опциями

enum Sex: Int {
    case NotKnown       = 0
    case Male           = 1
    case Female         = 2
    case NotApplicable  = 9

    static let all      = [NotKnown, Male, Female, NotApplicable]
    static let strings  = ["Unknown", "Male", "Female", "Not Applicable"]

    func string() -> String {
        let index = Sex.all.index(of: self) ?? 0
        return Sex.strings[index]
    }

    static func fromString(string: String) -> Sex {
        if let index = Sex.strings.index(of: string) {
            return Sex.all[index]
        }
        return Sex.NotKnown
    }
}

2. Создайте свою строку со всеми опциями, которые вы хотите выставить

<<< SegmentedRow<String>(){ row in
    row.title = "Sex"
    row.tag = "sex"
    row.selectorTitle = "Select your sex"
    row.options = [Sex.Female.string(), Sex.Male.string()]
}

3. Прочитайте значение

let row: SegmentedRow<String>? = self.form.rowBy(tag: "sex")
if let value = row?.value {
    // Returns "Female"
    print(value)

    // Returns 2
    print(Sex.fromString(string: value).rawValue)
}

Пользователь видит и выбирает Strings, но вы получите enum-значение, которое вы, например, можете сохранить в своей базе данных как целое число (см. ИСО / МЭК 5218).

https://en.wikipedia.org/wiki/ISO/IEC_5218

Другие вопросы по тегам