当我使用JSONEncoder
这样的结构时:
struct A: Encodable {
var items: [String : Int]
}
let a = A(items: ["a": 1, "b": 2, "c": 3])
我items
按预期将属性作为 JSON 对象:{"a": 1, "b": 2, "c": 3}
. 但是当我对这样的键使用枚举时:
enum E: String, Encodable {
case a, b, c
}
struct A: Encodable {
var items: [E : Int]
}
let a = A(items: [.a: 1, .b: 2, .c: 3])
我得到items
JSON 数组:["a", 1, "b", 2, "c", 3]
. 这非常令人困惑,而且我也找不到有关此行为的任何文档。
有一种方法可以通过将此类字典包装到结构中并实现 Encodable 协议来使此代码正常工作,但也许有简单的方法可以做到这一点?
struct A {
var items: W
}
struct W {
var items: [E : Int]
}
extension W: Encodable {
// etc
}