如何从字符串中创建枚举

发布于 2025-02-01 12:06:32 字数 283 浏览 0 评论 0原文

在Swift 2中,您可以从字符串中创建枚举吗?

enum Food : Int { case Pizza, Pancakes }
let str = "Pizza"
let food = Food(name:str)   // for example

最后一行不起作用,但我正在寻找类似的东西。像在Java中一样,您可以说food.valueof(“ pizza”)

编辑:我不能将字符串用作原始值。

In Swift 2, can you create an enum from a string?

enum Food : Int { case Pizza, Pancakes }
let str = "Pizza"
let food = Food(name:str)   // for example

That last line doesn't work, but I'm looking for something like it. Like in Java, you can say Food.valueOf("Pizza").

Edit: I can't use a String as a raw value.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

毅然前行 2025-02-08 12:06:32

您可以为枚举创建一个初始化器,该枚举将String作为参数创建。从那里,您切换到字符串,将自我的价值设置为特定情况:这样:

enum Food: Int {
    case None, Pizza, Pancakes


    init(string: String) {
        switch string {
        case "Pizza":
            self = .Pizza
        default:
            self = .None
        }
    }
}

let foo = Food(string: "") // .None
let bar = Food(string: "Pizza") // .Pizza

You can create an initializer for the enum that takes a String as a parameter. From there, you switch over the string to set the value of self to a specific case like so:

enum Food: Int {
    case None, Pizza, Pancakes


    init(string: String) {
        switch string {
        case "Pizza":
            self = .Pizza
        default:
            self = .None
        }
    }
}

let foo = Food(string: "") // .None
let bar = Food(string: "Pizza") // .Pizza
許願樹丅啲祈禱 2025-02-08 12:06:32

没有周围的编译器来检查详细信息,而是类似的内容:

enum Food { case Pizza="Pizza", Pancakes="Pancakes" }
let str = "Pizza"
let food = Food(rawValue:str)

Don't have a compiler around to check the details but something like:

enum Food { case Pizza="Pizza", Pancakes="Pancakes" }
let str = "Pizza"
let food = Food(rawValue:str)
请别遗忘我 2025-02-08 12:06:32

您可以设置原始值为字符串的枚举,然后通过指定原始值来创建枚举。这接近您的要求。

You can set up Enums where the raw value is a string, and then create an enum by specifying a raw value. That's close to what you are asking for.

尤怨 2025-02-08 12:06:32

伊恩(Ian)的答案很棒,但是根据您的需要,您可能更喜欢具有失败初始化器的枚举:

enum Food: Int {

    case Pizza, Pancakes

    init?(name: String) {
        switch name {
        case "Pizza":       self = .Pizza
        case "Pancakes":    self = .Pancakes
        default:            return nil
        }
    }

}

let pizzaString = "Pizza"
let food = Food(name: pizzaString) // returns .Pizza (optional)
print(food?.rawValue) // returns 0 (optional)

Ian's answer is great but, according to your needs, you may prefer an enum with a failable initializer:

enum Food: Int {

    case Pizza, Pancakes

    init?(name: String) {
        switch name {
        case "Pizza":       self = .Pizza
        case "Pancakes":    self = .Pancakes
        default:            return nil
        }
    }

}

let pizzaString = "Pizza"
let food = Food(name: pizzaString) // returns .Pizza (optional)
print(food?.rawValue) // returns 0 (optional)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文