Как я могу иметь словарь словарей с Codable в Swift4 - PullRequest
0 голосов
/ 01 декабря 2018

В настоящее время я отправляю в бэкэнд массив словарей, например:

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

Я использую протоколы Swift4 Codable для их кодирования / декодирования, и все работает нормально.

Однако,бэкэнд ожидает, что все args как объект (словарь) со всеми другими KVP (например, mobileData, bluetooth и т. д.) внутри него, как, например,

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

Не уверен, как я могу использовать Swift Codableпротоколы для создания чего-то подобного без превращения «значений» внутри «аргументов» в строку.Любая помощь будет оценена.Я что-то упускаю из виду?

1 Ответ

0 голосов
/ 01 декабря 2018

Каждый словарь представлен структурой.Как это:

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}}}
...