正文
SwiftyJSON
确實很好用 不會因為取了某個空對象的值而導緻程式的崩潰
但是 一直這樣
data["a"]["b"]["c"].stringValue
的形式也不太好
那怎樣把JSON轉換成對象呢
假如
JSON
的資料是這樣子的 怎樣轉成對象呢
{
"success":"true",
"msg":"擷取使用者資訊成功",
"obj":{
"userName":"張劍",
"userAlias":"劍行者",
"invitationCode":100
}
}
複制
協定
我們可以定義一個協定 讓對象實作它
import Foundation
import SwiftyJSON
public protocol ZJSwiftyJSONAble {
init?(jsonData:JSON)
}
複制
對象轉換
然後在定義兩個對象
Result對象
import Foundation
import SwiftyJSON
class ZJResult_S<T: ZJSwiftyJSONAble>: ZJSwiftyJSONAble {
var success: String!
var msg: String!
var obj: T?
required init?(jsonData:JSON){
self.success = jsonData["success"].stringValue
self.msg = jsonData["msg"].stringValue
self.obj = T(jsonData: jsonData["obj"])
}
}
複制
User對象
import Foundation
import SwiftyJSON
class ZJUser_S: ZJSwiftyJSONAble {
var userName: String!
var userAlias: String!
var invitationCode: Int!
required init?(jsonData:JSON){
self.userName = jsonData["userName"].stringValue
self.userAlias = jsonData["userAlias"].stringValue
self.invitationCode = jsonData["userAlias"].intValue
}
}
複制
這樣假如我們得到的
SwiftyJSON
的
JSON
為
swiftyJSON
我們就可以這樣轉
let result = ZJResult_S<ZJUser_S>(jsonData: swiftyJSON);
複制
對象數組轉換
那如果我們得到的資料是數組呢 該怎樣設定對象呢
如
JSON
的資料是這樣子的
{
"success":"true",
"msg":"擷取使用者資訊成功",
"obj":[{
"userName":"張劍",
"userAlias":"劍行者",
"invitationCode":100
},{
"userName":"李四",
"userAlias":"尼古拉斯趙四",
"invitationCode":101
}]
}
複制
這樣的話 我們隻需把
Result
對象改成這樣就行了
Result對象
import Foundation
import SwiftyJSON
class ZJResult_S<T: ZJSwiftyJSONAble>: ZJSwiftyJSONAble {
var success: String!
var msg: String!
var obj: [T]!
required init?(jsonData:JSON){
self.success = jsonData["success"].stringValue
self.msg = jsonData["msg"].stringValue
self.obj = jsonData["obj"].arrayValue.flatMap { T(jsonData: $0) }
}
}
複制
是不是很簡單
也就是 假如
swiftyJSON
是
User
的數組
let users = swiftyJSON.arrayValue.flatMap { ZJUser_S(jsonData: $0) }
複制