我想发送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
我对解码可编码对象数组没有问题,但我不知道我在编码方面做错了什么。