在OC中用惯了JSONModel,养成了一个习惯:所有的字段都用string接。
无疑,在OC 中,继承自JSONModel的模型里的属性都定义成string会避免一些空值时的报错,以及一些不是每次都有的字段锁造成的报错。
然而就是这个习惯,在swift3.0中坑了我一天!因为swift转模型时必须对应字段类型,而且在网上搜的一些代码、例子也都没说到这个点子上。默默的找啊找,找啊找;总算顿悟了��O(∩_∩)O哈哈~
下边就上代码吧,提醒下自己提醒下那些像我一样踩到这个坑里的朋友,但愿能提供些帮助吧。
import UIKit
class ShopModel: NSObject {
/*
大体的网络数据的格式
"resturantList":
[
{
"id": 62,
"companyId": 28,
"restaurantName": "AlfredShanghai",
"type": 3,
"description": "eee44",
"email": "610124860@qq.com",
"address1": "88882331",
"address2": "8888233",
"distance": 13010.223545388273,
"avgPrice": 0,
"channel": "披萨/报摊",
"telNo": "888888",
"country": "Singapore",
"state": "",
"city": "Singapore",
"postalCode": "8888",
"website": "",
"logoUrl": "http://139.224.17.126/upload/img/logo/ea79c1b9-eaac-4349-b938-5d65410f79f9.png",
"favoriteCount": 99,
"weekStartDay": 1,
"weekEndDay": 0,
"openTime": "09:00",
"closeTime": "24:00",
"isOrder": 1,
"isDelivery": 1,
"isPayment": 0,
"logoWidth": 204,
"logoHeight": 129,
"score": 5,
"lon": "122.20863",
"lat": "32.00022"
},
*/
var id : Int = 0
var companyId : Int = 0
var restaurantName : String = ""
var type : Int = 0
var isOrder : Int = 0
var score : Int = 0
var channel : String = ""
var logoUrl : String = ""
var address1 : String = ""
var address2 : String = ""
var telNo : String = ""
var lon : String = ""
var lat : String = ""
class func dicToModel(list:[[String : Any]]) -> [ShopModel] {
var models = [ShopModel]()
for dict in list {
models.append(ShopModel(dict: dict))
}
return models
}
override init() {
}
init(dict : [String : Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forKey key: String) {
super.setValue(value, forKey: key)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
}