ios - Swift 4 Codable:所有模型的通用结构
问题描述
在这里,我得到了我所有 api 的 API 响应。
{
"success" : true,
"message" : "",
"data" : {
/multipal data parameter/
}
}
这是我的可编码模型
struct Login: Codable {
let success: Bool
let message: String
let data: Data
struct Data: Codable {
}
}
我如何为成功和消息参数创建通用Sturct 。
解决方案
您可以使表示网络响应的根结构具有通用性,这将允许您在所有专门的响应之间保持success
和部分通用。message
struct NetworkResponse<ResponseData:Codable>: Codable {
let success: Bool
let message: String
let data: ResponseData
}
您不应该创建与内置类型同名的自定义类型,因为这会导致混淆,尤其是对于其他阅读您的代码的人,所以我将您的自定义Data
类型重命名为ResponseData
.
例如,您可以创建一个LoginResponse
模型并像下面这样对其进行解码。您可以对来自同一 API 的其他响应执行相同操作。
let loginResponse = """
{
"success" : true,
"message" : "",
"data" : {
"username":"test",
"token":"whatever"
}
}
"""
struct LoginResponse: Codable {
let username: String
let token: String
}
do {
print(try JSONDecoder().decode(NetworkResponse<LoginResponse>.self, from: Data(loginResponse.utf8)))
} catch {
print(error)
}
推荐阅读
- firebase - 如何将firebase配置为nuxt插件?
- c-preprocessor - 在 Doxygen 中记录条件独占代码
- python - 使用 AdamOptimizer 继续训练自定义 tf.Estimator
- javascript - React Native 等待所有图像预取完成
- php - Laravel关系并获取第三张表的数据
- python - 如何修复“单例数组 array(0) 不能被视为有效集合。”
- php - 刀片模板内将编号格式化为 K/M/B
- amazon-web-services - ZOHO deluge 脚本 getUrl() 函数可以读取 HTTP 响应标头吗?
- java - BehaviorSubject 在另一个线程上订阅
- c# - 为什么这个字符串看起来是按值内联存储在显式布局类或结构中的?