Swift:枚举大小写不是'String'类型的成员强制使用原始值

时间:2018-06-23 23:59:33

标签: swift enums

我有字符串枚举:

enum Country:String {
    case France
    case Germany
    case UnitedStates
}

但是我要根据uibutton restoreIdentifier做些事情。

我有这个建议:

@IBAction func countrySelection(_ sender: UIButton) {
    guard let selection:String = sender.restorationIdentifier else { return}
    switch selection {
    case Country.France:

    default:
        return
    }
}

但是我在此行遇到此错误:

Enum case 'France' is not a member of type 'String'

代码行:

case Country.France:

我可以修复将该行更改为以下错误:

case Country.France.rawValue

但是我的问题是,为什么我需要或强制使用原始值?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您正在尝试将StringCountry的值进行比较。它们不是同一类型。如您所述,您可以将switch cases更改为StringCountry.France.rawValue

或者您可以将String转换为Country值:

@IBAction func countrySelection(_ sender: UIButton) {
    guard let selection = sender.restorationIdentifier else { return }
    guard let country = Country(rawValue: selection)

    switch country {
    case .France:
        // handle France
    default:
        return
    }
}

注意: restorationIdentifier 并不是真的。