在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) } }