我收到服务器的回复,请按以下格式说明:
{
//Array of models
"A_Key" : [
{
"B_data" : ""
}
]
//dictionary
"A_Key_2" : {
"C_data" : ""
}
"A_Key_3" : "0"
"A_Key_4" : 0
}
现在我正在尝试为上述响应创建模型(我不想使用任何pod或库)。
所以我所做的是:
class A{
let A_Key : Array<B>!
let A_Key_2 : C!
let A_Key_3 : String!
let A_Key_4 : Int!
init(withDictionary dict:Dictionary<String, Any>){
self.A_Key = A.getArrayOfModel(fromArrayDictionary:dict["A_Key"] as! Array<Dictionary<String, Any>>)
self.A_Key_2 = C(withDictionary : dict["A_Key_2"] as! Dictionary<String, Any>)
self.A_Key_3 = dict["A_Key_3"] as? String ?? ""
self.A_Key_4 = dict["A_Key_4"] as? Int ?? 0
}
class func getArrayOfModel(fromArrayDictionary array:[Dictionary<String, Any>]){
var tempArray = [B]()
for dict in array{
tempArray.append(B(withDictionary: dict))
}
return tempArray
}
}
假设有类B和C以及适当的init方法。与此类似的东西正确编译并且所有迭代都发生而没有任何崩溃,所以我假设这将起作用。
现在我的查询是,这是使用字典在swift中初始化对象的最佳方法吗?由于我担心API会为nil
中的任何一个响应"A_Key"
值的情况(我会相信会导致崩溃)?
或
以下正确方式将json映射到swift中的对象?
如果是的话,检查nil的每个值是不是有点乏味?对于所有嵌套模型都有可选的init
方法,检查的数量会不断增加吗?
init(withDictionary dict:Dictionary<String, Any>){
if let a_key_3 = dict["A_Key_3"] as? String{
self.A_Key_3 = a_key_3
}
}