如何从Swift的原始值中枚举枚举?
我试图从原始值获取枚举types:
enum TestEnum: String { case Name case Gender case Birth var rawValue: String { switch self { case .Name: return "Name" case .Gender: return "Gender" case .Birth: return "Birth Day" } } } let name = TestEnum(rawValue: "Name") //Name let gender = TestEnum(rawValue: "Gender") //Gender
但似乎rawValue
不适用于带空格的string:
let birth = TestEnum(rawValue: "Birth Day") //nil
任何build议如何得到它?
太复杂了,只需将原始值直接分配给案例
enum TestEnum: String { case Name = "Name" case Gender = "Gender" case Birth = "Birth Day" } let name = TestEnum(rawValue: "Name")! //Name let gender = TestEnum(rawValue: "Gender")! //Gender let birth = TestEnum(rawValue: "Birth Day")! //Birth
如果案例名称与原始值匹配,您甚至可以忽略它
enum TestEnum: String { case Name, Gender, Birth = "Birth Day" }
完整的工作示例:
enum TestEnum: String { case name = "A Name" case otherName case test = "Test" } let first: TestEnum? = TestEnum(rawValue: "A Name") let second: TestEnum? = TestEnum(rawValue: "OtherName") let third: TestEnum? = TestEnum(rawValue: "Test") print("\(first), \(second), \(third)")
所有这些都将工作,但初始化使用原始值时,它将是一个可选项。 如果这是一个问题,你可以创build一个初始化或构造函数的枚举来尝试和处理这个,添加一个None的情况下,如果无法创build枚举返回它。 像这样的东西:
static func create(rawValue:String) -> TestEnum { if let testVal = TestEnum(rawValue: rawValue) { return testVal } else{ return .none } }
你可以像这样定义枚举 –
enum TestEnum: String { case Name, Gender, Birth }
要么
enum TestEnum: String { case Name case Gender case Birth }
你可以提供一个默认为其中一个成员值的init方法。
enum TestEnum: String { case Name, Gender, Birth init() { self = .Gender } }
在上面的例子中,TestEnum.Name有一个隐含的原始值“Name”,依此类推。
使用它的rawValue属性访问枚举大小写的原始值:
let testEnum = TestEnum.Name.rawValue // testEnum is "Name" let testEnum1 = TestEnum() // testEnum1 is "Gender"