首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Swift中,可以将字符串转换为枚举吗?

在Swift中,可以将字符串转换为枚举吗?
EN

Stack Overflow用户
提问于 2015-05-03 11:00:23
回答 8查看 62.5K关注 0票数 107

如果我有一个大小写为a,b,c,d的枚举,是否可以将字符串"a“转换为枚举?

EN

回答 8

Stack Overflow用户

发布于 2016-07-06 00:27:24

你所需要的是:

代码语言:javascript
复制
enum Foo: String {
   case a, b, c, d
}

let a = Foo(rawValue: "a")
assert(a == Foo.a)

let  = Foo(rawValue: "")
assert( == nil)
票数 41
EN

Stack Overflow用户

发布于 2018-09-03 19:25:55

在Swift 4.2中,CaseIterable协议可用于带有rawValues的枚举,但字符串应与枚举大小写标签匹配:

代码语言:javascript
复制
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 }
    }
}

用法:

代码语言:javascript
复制
print(MyCode.withLabel("one")) // Optional(MyCode.one)
print(MyCode(rawValue: "uno"))  // Optional(MyCode.one)
票数 37
EN

Stack Overflow用户

发布于 2016-04-10 21:55:56

在使用Int类型的枚举的情况下,可以这样做:

代码语言:javascript
复制
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
    }
}

并使用:

代码语言:javascript
复制
let string = "Two"
if let item = MenuItem.enumFromString(string) {
    //in this case item = 1 
    //your code
} 
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30009788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档