ios kvc json转model的简单现实

Posted 未来程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios kvc json转model的简单现实相关的知识,希望对你有一定的参考价值。

android开发中,可用第三方的转换库如gson等。当然在ios也有一些库如MJExtensiond等。在这里,我仅用官方的简单kvc模式实现一下。

一、先建一个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

这个就是简单的kvc实现josn和model转换的示例,如有问题欢迎留言!

简书地址:http://www.jianshu.com/p/99d302396ee9

 

以上是关于ios kvc json转model的简单现实的主要内容,如果未能解决你的问题,请参考以下文章

iOS端JSON转Model链式编程框架SuperKVC用法与原理

iOS端JSON转Model链式编程框架SuperKVC使用方法与原理

iOS开发笔试面试- KVC/KVO简单使用

KVC和KVO的简单对比

ios学习8_KVC和字典转模型

iOS 开发:Runtime(详解六)字典转模型