从 Swift 中的某些 JSON 数据初始化枚举的最合适方法是什么?

What is the most appropriate way to initialise an enum from some JSON data in Swift?

我想从一些JSON数据中初始化一个Shape枚举,但我觉得我这样做的方式可能会遇到错误,我想知道是否有更安全或更安全的方法从一些 JSON.

初始化枚举的标准方法

我的 JSON 数据片段如下所示:

"foo": [
        {
            "name": "bar",
            "enemyShape": "triangle",
        },

我可以通过 Codable 结构 like this:

访问数据
struct Enemy: Codable { //data about all the pegs
    
    let name: String
    private let enemyShape: String
    
    public var shape: Shape {
        return Shape(enemyShape)
    }
    
}

我初始化枚举 Shape(enemyShape) 的代码如下:

enum Shape: CaseIterable {
    case triangle
    case square
    case pentagon
    
    
    init(_ str: String) {
        switch str {
            case "triangle":
                self = .triangle
            case "square":
                self = .square
            case "pentagon":
                self = .pentagon
            default:
                self = .triangle
                print("Shape initiated with invalid value \(str). Defaulted to triangle.")
        }
    }
}

我担心这样做不安全或不正确 - 特别是因为 default: 下的代码永远不会执行,但必须用于代码编译。

是否有更好的方法从 JSON 获取枚举器?我只需要一些字符串,例如 "triangle" 来初始化 .triangle"square".square

编辑: 请注意,当我没有直接从 JSON 数据初始化此枚举时,这就是为什么我认为它不同于 题。我还希望能够在代码中的任何一点从 'similar' 字符串初始化一个枚举,而不必在那个时间点使用任何 JSON 数据。

我可以随时用enter link description here的方法这样初始化,所以我接受了他的回答。

你可以像这样直接使用enum

enum Shape:String, Codable, CaseIterable {
    case triangle = "triangle" 
    case square = "square" 
    case pentagon = "pentagon"
}