依然是使用swift混编,因为现在的项目是oc项目,但是不想写太多oc代码,所以用swift创建模型.因为swift创建模型可以很方便的输入默认值代码量也少,这样在读取json的时候就不用担心,因为json中没有返回值,而模型中默认值是nil,然后控件读取模型的时候,读到nil的时候闪退了.
先上代码
json是这样的,其中有一个嵌套的responseObj
{
"message2":"0",
"pageInfo":null,
"code":"0",
"message":"success",
"responseList":null,
"total":0,
"responseObj":{
"ruleId":"WATCd8acb4b33d4745789be5544bef951c67",
"pageSize":null,
"kindergartenName":null,
"kindergartenId":"1",
"watchLength":"2",
"watchNumber":"4",
"pageNum":null
}
}
用swift创建模型的时候设置好默认值’
把嵌套的子模型的类名起成json里面返回嵌套的名字responseObj,这样yy_model可以自动赋值
swift模型代码
//主模型
@objc class WatchRuleItem: NSObject {
@objc var code:String = ""
@objc var message:String = ""
@objc var message2:String = ""
@objc var pageInfo:String = ""
@objc var responseList:String = ""
@objc var total:String = ""
@objc var responseObj:WatchRuleResponseObjItem = WatchRuleResponseObjItem() //这里给子模型创建对象
required override init() {
}
override var description:String {
return self.dictionaryWithValues(forKeys: ["code","message","message2","pageInfo","responseList","total","responseObj"]).description
}
}
//嵌套的子模型
class WatchRuleResponseObjItem: NSObject {
@objc var kindergartenId:String = ""
@objc var kindergartenName:String = ""
@objc var pageNum:String = ""
@objc var pageSize:String = ""
@objc var ruleId:String = ""
@objc var watchLength:String = ""
@objc var watchNumber:String = ""
required override init() {
}
override var description:String {
return self.dictionaryWithValues(forKeys: ["kindergartenId","kindergartenName","pageNum","pageSize","ruleId","watchLength","watchNumber"]).description
}
}
oc中获取json后转换模型的代码
//oc代码中调用的语句:
WatchRuleItem *item = [WatchRuleItem yy_modelWithJSON:jsonData];
然后我们打一个断点,查看读出来的模型,是否有子模型
在lldb里面输入: po item.responseObj.watchNumber
得到结果是4,跟json返回的一样,大功告成,这样代码可以少些很多,之后我有空会把自动意见生成swift模型的代码贴出来,现在我创建模型已经不再用手动输入了
关于纯swift使用yy_model请参照我这篇文章:swift使用yymodel解析数组模型