Swift Eureka Forms - 如何为字段选项赋值?

时间:2016-11-11 23:24:34

标签: swift eureka-forms

如果我创建一个像这样的分段行字段:

<<< 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将返回AUAUSTRIA将返回AT等。

1 个答案:

答案 0 :(得分: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 - 值,您可以将其作为整数保存在数据库中(参见:ISO / IEC 5218)。

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