KVC

KVC (key value coding):间接通过字符串类型的key取出对应的属性值

一.作用:
1.可以访问私有成员变量的值
例如访问person 对象的私有成员变量_height的值:

1.png
   HMPerson *p = [[HMPerson alloc] init];
   NSLog(@"%@", [p valueForKeyPath:@"_height"]);

或者可以使用下面的方法访问

   NSLog(@"%@", [p valueForKeyPath:@"height"]);

(这个方法先调用height的get方法,如果没有get方法,再去访问_height的成员变量.)

2.可以间接修改私有成员变量的值(替换系统自带的导航栏、tabbar)

3.kvc的其他作用
当一个对象是id类型的时候,不能使用点语法访问成员变量,但是仍然可以使用kvc进行访问.

2.png
3.png
   [p valueForKeyPath:@"age"];

二.valueForKeyPath和valueForKey的区别:

   // keyPath包含了key的功能
   // key:只能访问当前对象的属性
   // keyPath:能利用.运算符一层一层往内部访问属性

例如:对HMPerson曾加自定义HMDog属性

dog.png
person.png
6.png

此时要通过kvo访问name属性只能使用valueForKeyPath

   NSLog(@"%@", [p valueForKeyPath:@"dog.name"]);

三.kvc在数组中的其他用途
例如person对象添加book自定义属性

book.png
8.png

获取所有书名

    NSArray *names = [p valueForKeyPath:@"books.name"];
    NSArray *names = [p.books valueForKeyPath:@"name"];

获取书籍总价

   double sumPrice = [[p valueForKeyPath:@"books.@sum.price"] doubleValue];

获取书籍最大值

   double sumPrice = [[p valueForKeyPath:@"books.@max.price"] doubleValue];

获取书籍最小值

   double sumPrice = [[p valueForKeyPath:@"books.@min.price"] doubleValue];

获取书籍平均价格

   double sumPrice = [[p valueForKeyPath:@"books.@avg.price"] doubleValue];

计算数组长度

NSLog(@"%@", [p valueForKeyPath:@"books.@count"]); 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    朽木自雕也阅读 5,488评论 6 1
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    黑暗中的孤影阅读 50,148评论 74 441
  • KVC简单介绍 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key...
    公子无礼阅读 5,281评论 0 6
  • 简介 KVC(Key-value coding)键值编码,翻译一下就是指iOS的开发中,可以允许开发者通过Key名...
    6ffd6634d577阅读 5,218评论 1 9
  • KVC(Key-value coding)键值编码,iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,...
    CALayer_Sai阅读 7,368评论 0 4