我有字符串枚举:
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
但是我的问题是,为什么我需要或强制使用原始值?
非常感谢您的帮助。
答案 0 :(得分:3)
您正在尝试将String
与Country
的值进行比较。它们不是同一类型。如您所述,您可以将switch
cases
更改为String
:Country.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 并不是真的。