JSON Отправка массива Swift с использованием Alamofire - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь отправить массив JSON объекта, который мне нужен для обновления объекта на моем сервере. Мне нужен массив для запроса параметров. Это моя конструкция массива, который мне нужен для обновления значения объекта сервера:

[{
    "propName":"number", "value":numberValue
}]

Вот что я пытаюсь сделать в Swift:

let params = [
  { "propName":"number", "value":numberValue },
  { "propName":"address", "value":addressValue },
  { "propName":"notes", "value":notesValue },
  { "propName":"latitude", "value":latitudeValue },
  { "propName":"longitude", "value":longitudeValue}
] as [String: Any]
        
let updateParkingSpotRequest = AF.request(URLs.MarkParkingSpotAsAvail(parkingSpotId: parkingSpotId), method: .patch, parameters: params, encoding: JSONEncoding.prettyPrinted, headers: nil, interceptor: nil, requestModifier: nil)

Но это не так. работают, поскольку он не может преобразовать эту форму данных, XCode говорит: «Невозможно преобразовать значение типа '[() -> String]' в тип '[String: Any]'». Как я могу получить тот формат данных, который нужен серверу?

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Параметр parameters является типом [String: Any] в Alamofire. Итак, вам нужно создать словарь параметров.

Итак, предположим, что у вас есть список Data моделей, вы можете создать params, как показано ниже;

struct Data {
    var propName: String
    var value: Any
}

let values: [Data] = [
    Data(propName: "number", value: numberValue),
    Data(propName: "address", value: addressValue),
    Data(propName: "notes", value: notesValue),
    Data(propName: "latitude", value: latitudeValue),
    Data(propName: "longitude", value: longitudeValue)
]

let params: [String: Any] = Dictionary(uniqueKeysWithValues: values.map{ ($0.propName, $0.value) })
0 голосов
/ 13 июля 2020

Вам нужно написать инициализатор следующим образом:

let params = [
  [ "propName": "number", "value": numberValue ],
  [ "propName": "address", "value": addressValue ],
  [ "propName": "notes", "value": notesValue ],
  [ "propName": "latitude", "value": latitudeValue ],
  [ "propName": "longitude", "value": longitudeValue ]
] as [[String: Any]]

т.е. params - это массив словарей от String до Any.

...