先贴上互转方法
这是Dictionary转Data 的方法
源码:
funcjsonToData(jsonDic:Dictionary) ->Data?{
if(!JSONSerialization.isValidJSONObject(jsonDic)) {
print("is not a valid json object")
returnnil
}
//利用自带的json库转换成Data
//如果设置options为JSONSerialization.WritingOptions.prettyPrinted,则打印格式更好阅读
letdata =try? JSONSerialization.data(withJSONObject: jsonDic, options: [])
//Data转换成String打印输出
letstr = String(data:data!, encoding: String.Encoding.utf8)
//输出json字符串
print("Json Str:\(str!)")
returndata
}
这是Data转Dictionary, 上面是首先判断能否转换成功,下面用的do catch。
源码:
funcdataToDictionary(data:Data) ->Dictionary?{
do{
letjson =tryJSONSerialization.jsonObject(with: data, options: .mutableContainers)
letdic = jsonas!Dictionary
returndic
}catch_{
print("失败")
returnnil
}
}
首先因为是自己写的Demo,所以先定义Dictionary,转为Data,然后再转成Dictionary。
这样的最后得到的Dictionary就是一开始你定义的。
然后关于Model,直接上图
定义好你需要的变量,也就是成员,然后将解析出来的Dictionary的key定义为一个数组(例子中就是我定义的Dictionary的key,实际项目中就是你得到的返回值对应的key),再将你与之相对应的变量定义为一个数组,顺序要对应上哟。然后遍历数组并赋值
源码:
classtestModel:NSObject{
varname:String!
varage:String!
varsex:String!
convenienceinit(dic:Dictionary){
self.init()
letarr1 = ["姓名","年龄","性别"]
letarr2 = ["name","age","sex"]
for(index, value)inarr1.enumerated() {
self.setValue(dic[value], forKey: arr2[index])
}
下面是使用方法
调用非常简单,传入Dictionary就搞定了所有的赋值。这样子的Model同样适用于第三方库解析出来的数据,例如SwiftJSON,区别只是传入的字典类型改为JSON。
转载请注明出处,谢谢。
网友评论