黑马程序员技术交流社区
标题: 【iOS开发入门】你真的了解KVC吗?(中) [打印本页]
作者: Simpon 时间: 2016-5-10 15:15
标题: 【iOS开发入门】你真的了解KVC吗?(中)
本帖最后由 Simpon 于 2016-10-27 10:31 编辑
版权声明:本文为作者原创文章,未经作者允许不得转载。
KVC的优点合集
优点一:破门而入:与别人家的“私人专属”亲密接触
我们都知道,如果@property写在.h文件中,代表外界可以通过调用对应的setter和getter方法(或点语法)来访问对应的私有成员变量,但如果写在.m中,代表只允许本类中访问,其他地方访问不了。因此,我们给之前的Person类在.m文件中写一个延展,
把.h文件的@property挪到.m的延展中。并且在.m文件中再加一个用@private修饰的成员变量
如图:
此时,我们通过点语法来给属性赋值取值即会报错,如图
但是,如果是KVC方式,此时依然坚挺!
到此为止,KVC的好处之一得到完美体现:无论类中的成员是否私有,用KVC都可以强行“破门而入”,对它们正常取值和赋值。
除此以外,还有个显而易见的好处是:KVC中不管你的成员变量是否加下划线,你用KVC取值和赋值时传入的属性名都可以不带下划线。
优点二:大大简化字典转模型代码
很多时候,我们通过加载本地文件,或者网络请求会得到一个数据字典,为了方便调用,一般我们都会将这个字典转换为对应的模型类,但是,不用KVC的转换方法太过费劲,如图:
先有一个HMPerson类
然后有一个字典,并且把字典里的元素赋值给HMPerson对象,如下图所示:
此时用点语法相当的麻烦,如果有100个属性,就必须一个元素一个元素地写100次。但用KVC的方式如何呢?我们看代码:
有同学看到这可能会疑惑了,KVC方式也没见得有多简便啊,代码看起来更多了!对,目前来说是这样子,但是大家仔细观察,setValue和ForKey两个参数里传入的key名是不是完全一样?如图:
而这些Key,是不是刚好可以在遍历这个字典数据就可以获取到?如图:
大家看,在这个循环里,key好像就是我们用KVC的setValue:值 forKey:键 中需要传入的“键”,而dic[key]就是正方法中需要传入的“值”。
因此,我们可以将KVC实现字典转模型的方法直接用这个循环解决,如图:
看,此时是不是特别方便,代码特别简洁?哪怕以后字典有100项数据,对应实体类100个属性,再不用怕,就用这一个循环即可搞定!
但,这还不够简洁!KVC提供了一套更简洁的操作方式,只需你传入一个字典,就可以帮你自动把字典里的每一项赋值给你实体类对应的属性,如图:
对,仅需调用setValuesForKeysWithDictionary方法,传入字典即可。这个方法内部,帮我们做了我们刚刚循环字典的操作,因此仅仅这一个方法就可完成字典数据转模型数据,从此,妈妈再也不用担心我写多余代码了!
注意:用setValuesForKeysWithDictionary或者自己写循环做字典数据转模型数据时,必须保证实体类的属性跟字典中的key名字一一对应,并且属性可以比字典多,但是绝对不能比字典的元素少!
可是除此之外还是有很多在使用KVC时候遇到的问题的,那么请看
精华推荐:
作者: wendaogds 时间: 2016-5-10 23:02
属性比字典都多啊,压力很大啊
作者: Simpon 时间: 2016-5-11 09:08
什么问题? 没get到你的点啊 问题说详细点哈
作者: 18316761642 时间: 2016-5-13 16:37
看了这篇,心中很多疑惑都解开了,继续看下去
作者: huangyihan1988 时间: 2016-5-13 21:37
好厉害好厉害好厉害
作者: Ar_Vic 时间: 2016-5-16 09:56
又来学习了,谢谢楼主分享
作者: 1937362521 时间: 2016-5-27 17:50
哈哈哈哈哈哈哈哈
作者: Chris_Wu 时间: 2016-6-5 17:35
戳开看看
作者: luffy99 时间: 2016-6-7 19:03
楼主强强强
作者: wodetaoshu 时间: 2016-6-19 12:26
好东西,收藏
作者: 简单Life 时间: 2016-6-20 15:17
接着看吧
作者: cortex 时间: 2016-6-21 17:03
谢谢版主
作者: zhonghphuan 时间: 2016-7-23 00:42
确实有点厉害
作者: TaoT 时间: 2016-7-27 11:34
iOS开发入门】你真
作者: changee 时间: 2016-8-16 18:48
666666666666666666
作者: lwbo_1234 时间: 2016-9-19 18:42
感谢分享 很好的文章感谢分享 很好的文章
作者: Diaw2016 时间: 2016-9-22 12:42
nice ,谢谢
作者: 有无相生 时间: 2016-11-10 16:29
zhendezuiless
作者: geniuswen 时间: 2016-12-1 17:39
学习了学习了学习了学习了学习了
作者: zhang987 时间: 2016-12-29 14:56
好东西,谢谢分享
作者: awenlovelearn 时间: 2016-12-30 18:00
wo yao xue xi lalala
作者: awenlovelearn 时间: 2017-1-3 10:42
ni zhende liaojie kvc me
作者: Light_Li 时间: 2017-2-15 10:14
回复可见
作者: awenLoveStudy 时间: 2017-3-23 07:51
那就拭目以待
作者: v2success 时间: 2017-4-16 22:27
seesssssssssssss
作者: hold47 时间: 2017-4-27 19:27
6666666666666
作者: 18150091472 时间: 2017-5-11 16:37
66666666666
作者: べ戀¢豬そ☆ 时间: 2017-5-16 22:00
KVC问题啥问题sha'wen'ti啥问题
作者: logll 时间: 2017-9-25 14:17
1
作者: wilsondex 时间: 2017-10-6 13:15
KVC的问题是什么
作者: JLX 时间: 2018-2-22 14:43
hhhhhhhhhhhhhhh
作者: 苏明明 时间: 2018-2-22 15:29
好了,好了,我知道了。
作者: ji85210 时间: 2018-2-24 16:11
zhishikangejieguo
作者: xiaoliuTX 时间: 2018-2-26 15:09
为嘛要回复
作者: wolfhous 时间: 2018-4-10 14:06
3456789098765
作者: baby14 时间: 2018-7-15 10:29
多谢分享
作者: aa12322 时间: 2019-1-28 11:34
呀呀呀呀呀呀晕晕晕晕晕晕晕晕晕晕晕晕晕
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |