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

时间: 2024-11-05 11:29:57

ios kvc json转model的简单现实的相关文章

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

背景 在client编程中.字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,可是KVC仅仅能进行单层浅注入.且无法处理类型转换.key与属性名不正确应.深度注入等问题,笔者从Masonry得到启示,开发了一个通过链式配置注入器实现深度注入.类型转换.key-属性名映射等功能的轻量级注入框架SuperKVC.眼下已经开源到GitHub,点击这里前往.欢迎Star和Fork.欢迎和我一起完好这个框架! 本文将从应用和原理两个角度介绍SuperKVC

iOS & Mac JSON To Model

NSString * jsonPath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Contents.json"]; NSString * jsonStr=[[NSString alloc] initWithData:[NSData dataWithContentsOfFile:jsonPath] encoding:NSUTF8StringEncoding]; NSLog(@"%

iOS项目中Json转Model的坑

Json转Model json转model,是个开发都会遇到过.都已经9102年了,谁还不会用个第三方框架搞.拿起键盘就是干!打开podfile,把大名顶顶的YYModel写上,pod install一下.再用上ESJsonFormat,直接根据json,都能把model生成好. 特殊处理 啥?返回的字段值不是我们所需的在日常开发中,经常会遇到一些接口字段返回的值,并不是我所需要的类型的情况,这个时候,我们都会对这个字段进行处理.举个栗子: 123456 /** 错误代码 */@property

(转)iOS XML JSON SQLite CoreData 数据持久化

一.文件操作 1.因为应用是在沙盒(Sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: * Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 * tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除 * Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下的文件不会在应用退出删除 2.相关方法:       # 使用NSSearchPathForDiretoriesI

iOS下JSON反序列化开源库

iOS下JSON字符串反序列化成对象,在正式的项目中比较常见.如下几个常用开源库,可以根据个人喜好任选其一: 1. JSONModel: https://github.com/icanzilb/JSONModel 2. MJExtension: https://github.com/CoderMJLee/MJExtension 3. Mantle: https://github.com/Mantle/Mantle 其中,JSONModel对数组元素反序列化,需要定义一个跟数组元素Model的类名

IOS解析JSON

JSON建构有两种结构: json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组2种结构,通过这两种结构可以表示各种复杂的结构 1.对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字.字符串.数组.对象几种. 2.数组:数组在js中是中括号“[]”扩

IOS 字典快速转换为Model

一般情况下IOS得局部页面加载的过程是,创建一个Model然后,将Nib文件与Model进行关联,然后能够快速的获取到Nib文件上的控件实例.操作生成页面. 但是原生的内容是没有直接通过Json获取Model只能生成字典.然后转换为Model.下列方法就是通过字典来转换为Model的过程. 将字典转换为Model -(BOOL)reflectDataFromOtherObject:(NSDictionary *)dic { unsigned int outCount, i; objc_prope

iOS instruments之ui automation的简单使用(高手绕道)

最近使用了几次instruments中的automation工具,现记录下automation的简单使用方法,希望对没接触过自动化测试又有需求的人有所帮助.  UI 自动测试是iOS 中重要的附加功能,它由名为"Automation"的新的工具对象支持.Automation工具的脚本是用JavaScript语言编写,主要用于分析应用的性能和用户行为,模仿/击发被请求的事件,利用它可以完成对被测应用的简单的UI测试及相关功能测试. 一. 简单的录制脚本 打开xcode,这里用我为我家亲爱

iOS开发UI篇—xib的简单使用

iOS开发UI篇—xib的简单使用 一.简单介绍 xib和storyboard的比较,一个轻量级一个重量级. 共同点: 都用来描述软件界面 都用Interface Builder工具来编辑 不同点: Xib是轻量级的,用来描述局部的UI界面 Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系 二.xib的简单使用 1.建立xib文件 建立的xib文件命名为appxib.xib 2.对xib进行设置 根据程序的需要,这里把view调整为自由布局 建立vie