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



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

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

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

我可以通过Codable结构访问数据,如下所示:

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数据初始化这个枚举时,这就是为什么我认为它与这个问题不同。我还希望能够在代码的任何时候从"类似"字符串初始化枚举,而不必在那个时间点使用任何JSON数据。

我可以在任何时候用输入链接描述的方式初始化这里的方法,所以我接受了他的答案。

您可以像这个一样直接使用enum

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

相关内容

  • 没有找到相关文章

最新更新