我想从一些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"
}