如果我有一个大小写为a,b,c,d的枚举,是否可以将字符串"a“转换为枚举?
发布于 2016-07-06 00:27:24
你所需要的是:
enum Foo: String {
case a, b, c, d
}
let a = Foo(rawValue: "a")
assert(a == Foo.a)
let = Foo(rawValue: "")
assert( == nil)
发布于 2018-09-03 19:25:55
在Swift 4.2中,CaseIterable协议可用于带有rawValues的枚举,但字符串应与枚举大小写标签匹配:
enum MyCode : String, CaseIterable {
case one = "uno"
case two = "dos"
case three = "tres"
static func withLabel(_ label: String) -> MyCode? {
return self.allCases.first{ "\($0)" == label }
}
}
用法:
print(MyCode.withLabel("one")) // Optional(MyCode.one)
print(MyCode(rawValue: "uno")) // Optional(MyCode.one)
发布于 2016-04-10 21:55:56
在使用Int类型的枚举的情况下,可以这样做:
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
}
https://stackoverflow.com/questions/30009788
复制相似问题