Кодировать сам массив объектов Codable в [String: Any] - PullRequest
0 голосов
/ 19 марта 2019

Я хочу отправить массив Codable объектов.Итак, я создал класс, соответствующий протоколу Codable:

class ResultAnswer: Codable {
    var id: Int
    var closed: [Int]?
    var open: String?
    init(id: Int) {
        self.id = id
    }
}

Когда мне нужно отправить данные на сервер, я создаю surveyResults типа [ResultAnswer], это вычисляемое свойство в моей viewModel.Я использую Alamofire, поэтому мне нужно конвертировать мой массив в тип [String: Any]?.Вот фрагмент кода, который отвечает за кодирование и отправку запроса.Это часть моей модели представления.:

let sessionManager = Alamofire.SessionManager(configuration: URLSessionConfiguration.default)
let data = try encoder.encode(surveyResults)
if let parameters = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
    sessionManager.request("someUrl", method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseData { response in
        //repsponse processing
    }
}

Кодирование дает мне странный результат:

(lldb) po surveyResults
▿ 2 elements
  ▿ 0 : <ResultAnswer: 0x6000005c1890>
  ▿ 1 : <ResultAnswer: 0x6000005c1c20>

(lldb) po try encoder.encode(surveyResults)
▿ 45 bytes
  - count : 45
  ▿ pointer : 0x00007f95b3098e00
    - pointerValue : 140280930602496
  ▿ bytes : 45 elements
    - 0 : 91
    - 1 : 123
    - 2 : 34
    - 3 : 105
    - 4 : 100
    // and 40 similar elements

Так что, как вы можете догадаться, попытка сериализации данных возвращает nil.

(lldb) po try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
nil

У меня нет проблем с декодированием массива кодируемых объектов, но я не знаю, что я делаю не так с кодировкой.

...