Формы 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).