我怎样才能在 Swift4 中使用 Codable 的字典

How can I have a dictionary of dictionaries with Codable in Swift4

我目前正在向后端发送一组字典,如下所示-

"args": [
{
    "mobileData" =     {
        "accessState" = 1;
        "changeState" = 0;
    };
},
{
    "bluetooth" =     {
        "accessState" = 1;
        "changeState" = 0;
    };
}]

我使用 Swift4 Codable 协议 encode/decode 这些并且它工作正常。

然而,后端期望整个 args 作为一个对象(字典),其中包含所有其他 KVP(例如 mobileData、蓝牙等),如下所示 -

"args":{  
      "mobileData":{  
         "accessState":1, 
         "changeState":0
      },
    "bluetooth" =     {
        "accessState" = 1;
        "changeState" = 0;
    };
}

不确定我如何使用 Swift Codable 协议来创建类似的东西而不使 "args" 中的 "values" 成为字符串。任何帮助,将不胜感激。我是否漏掉了一些明显的东西?

每个字典都由一个结构表示。像这样:

struct States:Encodable {
    let accessState:Int
    let changeState:Int
}
struct Args:Encodable {
    let mobileData:States
    let bluetooth:States
}
struct Wrapper:Encodable {
    let args:Args
}
let json = Wrapper(
    args: Args(
        mobileData: States(accessState: 1, changeState: 0),
        bluetooth: States(accessState: 1, changeState: 0)
    )
)
let data = JSONEncoder().encode(json)
print(String(data: data, encoding: .utf8)!)
// {"args":{"mobileData":{"accessState":1,"changeState":0},"bluetooth":{"accessState":1,"changeState":0}}}