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