如何从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"