【发布时间】:2021-09-13 11:09:13
【问题描述】:
我的应用从我们的服务器接收二进制数据。在我的旧 Objective-C 代码中,我按如下方式处理响应数据:
- 使用 NSJSONSerialization 将 NSData 转换为 NSDictionary,其中包含如下数据:{"code": "0", "info": {"user_id": 123456}},
- 编写一个 MTLModel 子类
- 使用 Mantle API 将上述 info 字典,即 {"user_id": 123456} 转换为我的模型
现在我想用 Swift 来做这件事,我刚刚了解了 Codable 协议的便利性。但是,看起来这个协议实现了,我只能用Data/NSData转换,这使得上面的程序变成了这样:
- 同上
- 编写符合 Codable 协议的结构/类
- 使用 NSJSONSerialization 将 info 字典,即 {"user_id": 123456} 重新编码为 Data/NSData
- 使用 JSONDecoder 将此数据解码到我的模型中
所以我的问题是,可以直接从字典中派生 Codable 对象吗?
编辑:
感谢你们的回答,但让我澄清一下。 虽然响应 JSON 格式有些固定,但是请求和响应有很多不同,所以 info 部分是不同的。例如:
- R1: {"code": "0", "info": {"user_id": 123456}} 是用户 ID 请求的响应
- R2: {"code": "0", "info": {"temperature": 20, "country": "London"}} 是天气温度请求的响应
因此,Codable 类/结构应该仅从 info 部分构造,而不是整个响应数据,这就是为什么我不能简单地应用步骤2 & 4 来实现这一点。
【问题讨论】:
-
如果我理解正确,您可以在步骤 1 中直接解码。
let result = try JSONDecoder().decode(SomeClass.self, from: data)其中SomeClass是您的自定义类,“data”是您从服务器接收的数据
标签: ios swift objective-c codable