[英]Swift 4 Codable : Common struct for all model
在這里,我得到了所有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)
}
共同結構:
我創造了類似的東西
struct statusModel<T:Codable>: Codable {
let message : String
let resultData : [T]?
let status : Int
enum CodingKeys: String, CodingKey {
case message = "message"
case resultData = "resultData"
case status = "status"
}
}
常規模型(resultData)
struct modelInitialize : Codable {
let profileimgurl : String?
let projecturl : String?
enum CodingKeys: String, CodingKey {
case profileimgurl = "profileimgurl"
case projecturl = "projecturl"
}
}
你可以設置如下
do {
guard let reponseData = responseData.value else {return} //Your webservice response in Data
guard let finalModel = try?JSONDecoder().decode(statusModel<modelInitialize>.self, from: reponseData) else {return}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.