2

当我使用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])

我得到itemsJSON 数组:["a", 1, "b", 2, "c", 3]. 这非常令人困惑,而且我也找不到有关此行为的任何文档。

有一种方法可以通过将此类字典包装到结构中并实现 Encodable 协议来使此代码正常工作,但也许有简单的方法可以做到这一点?

struct A {
    var items: W
}

struct W {
    var items: [E : Int]
}

extension W: Encodable {
    // etc
}
4

0 回答 0