在Swift中,是否可以将string转换为枚举?

如果我有一个枚举案例a,b,c,d是否有可能把string“a”作为枚举?

当然。 枚举可以有一个原始值。 引用文档:

原始值可以是string,字符或任何整数或浮点数字types

摘录自:苹果公司“Swift编程语言”,iBooks。 https://itun.es/us/jEUH0.l

所以你可以使用这样的代码:

enum StringEnum: String { case one = "one" case two = "two" case three = "three" } let anEnum = StringEnum(rawValue: "one")! print("anEnum = \"\(anEnum.rawValue)\"") 

注意:在每种情况下,您不需要写=“一”等。 默认的string值与大小写名称相同,因此调用.rawValue将只返回一个string

编辑

如果您需要string值来包含空格,而这些空格不是有效值的一部分,那么您需要明确设置string。 所以,

 enum StringEnum: String { case one case two case three } let anEnum = StringEnum.one print("anEnum = \"\(anEnum)\"") 

anEnum =“一”

但是如果你想要one显示“值一”你将需要提供string值:

 enum StringEnum: String { case one = "value one" case two = "value two" case three = "value three" } 

所有你需要的是:

 enum Foo: String { case a, b, c, d } let a = Foo(rawValue: "a") assert(a == Foo.a) let 💩 = Foo(rawValue: "💩") assert(💩 == nil) 

如果用Inttypes的枚举,你可以这样做:

 enum MenuItem: Int { case One = 0, Two, Three, Four, Five //... as much as needs static func enumFromString(string:String) -> MenuItem? { var i = 0 while let item = MenuItem(rawValue: i) { if String(item) == string { return item } i += 1 } return nil } } 

并使用:

 let string = "Two" if let item = MenuItem.enumFromString(string) { //in this case item = 1 //your code } 

扩展邓肯C的答案

 extension StringEnum: StringLiteralConvertible { init(stringLiteral value: String){ self.init(rawValue: value)! } init(extendedGraphemeClusterLiteral value: String) { self.init(stringLiteral: value) } init(unicodeScalarLiteral value: String) { self.init(stringLiteral: value) } }