在android开发中,可用第三方的转换库如gson等。当然在ios也有一些库如MJExtensiond等。在这里,我简单实现一下。
一、先建一个model并且继承NSObject,代码如下:
classUser:NSObject{
var name:String?
var sex:String?
var age:Int=0
override func setValue(_value:Any?, forUndefinedKey key:String) {
}
}
二、在控制器中进行测试
classTestViewController:UIViewController{
overridefuncviewDidLoad() {
super.viewDidLoad()
let dic = ["name":"张三","sex":"男","age":"20"]
let user =User()
user.setValuesForKeys(dic)
print("-转换结果--",user.name!,"---",user.sex!,"---",user.age)
}
overridefuncdidReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
运行后可以看到
-转换结果--张三---男--- 20
注意:
但是有个问题,当我们的json数据字段多余我们的模型字段的时候就直接奔溃了(也就是说要一一对应,不然就报错)。这样的话显然不是我们想要的,因为在实际开发中,我们都只会取我们想要的那部分数据,其他的我们并不需要,这个问题怎么解决的其实也简单,只需要在我们的模型中重写一个setValue方法就可以过滤掉没有的字段了代码如下:
classUser:NSObject{
varname:String?
varsex:String?
varage:Int=0
varno:String?
override func setValue(_value:Any?, forUndefinedKey key:String) {
}
}
重写后我们在测试的那个字典中加入a这个字段再来测试一下
classTestViewController:UIViewController{
overridefuncviewDidLoad() {
super.viewDidLoad()
letdic = ["name":"张三","sex":"男","age":"20","no":"1000","a":"wx"]
letuser =User()
user.setValuesForKeys(dic)
print("-转换结果--",user.name!,"---",user.sex!,"---",user.age,user.no!)
}
overridefuncdidReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
运行不报错了,结果为:-转换结果--张三---男--- 20 1000
注:以上为swift3的实现,swift4之后有了变化,具体请看我的另一篇博客:swift4之kvo的使用
这个就是简单的实现josn和model转换的示例,如有问题欢迎留言!