IOS之KVC
来源:互联网 发布:网络监管员是做什么的 编辑:程序博客网 时间:2024/04/30 10:34
KVC:即Key Value Coding :间接通过字符串类型的属性字段key取出该属性的值
作用:1.可以通过valueForKey或者valueForKeyPath访问对象所有成员变量属性的值(包含@private)
2.可以通过[setValue:forKey:]或者[setValue:forKeyPath:]间接修改私有成员变量的值
实例:
- (void)viewDidLoad {
[super viewDidLoad];
//KVC :key value coding 间接通过字符串类型的属性字段key取出该属性的值
//KVC的价值:
//1.可以访问私有成员变量的值
//2.可以间接修改私有成员变量的值
Persion *p = [[Persionalloc]init];
p.age = 20;
//取公有值
id age = [p valueForKey:@"age"];
//取得私有的值(height为Persion的@private)
id height = [p valueForKey:@"height"];
NSLog(@"age = %d, height = %f",[ageintValue],[height floatValue]);
//输出结果:2014-12-08 15:48:02.611 KVC[83711:3714658] age = 20, height = 0.000000
//修改私有的值
[p setValue:@(1.2)forKey:@"height"];
NSLog(@"修改后的height=%f",[[pvalueForKey:@"height"]floatValue]);
//输出结果:2014-12-08 15:48:02.612 KVC[83711:3714658]修改后的height=1.200000
//dog为p的属性,类型为Dog,dog中有name和weight属性
p.dog = [[Dogalloc]init];
p.dog.name =@"hah";
//利用kvc取得p的dog属性的name的值
[p valueForKeyPath:@"dog.name"];
//小结:
// 1.valueForKey只能访问对象的属性
// 2.valueForKeyPath能通过.语法,一层一层的访问内部属性
Dog *d1 = [[Dogalloc]init];
d1.name = @"D1";
d1.weight = 20.2;
Dog *d2 = [[Dogalloc]init];
d2.name = @"D2";
d2.weight = 30.2;
Dog *d3 = [[Dogalloc]init];
d3.name = @"D3";
d3.weight = 40.2;
p.dogs = @[d1,d2,d3];
//dogs为p的属性,这个人拥有多少只狗,类型为NSArray
//用kvc取出这个人拥有的狗的个数
int count = [[pvalueForKeyPath:@"dogs.@count"]intValue];//NSArray为系统的类,则需要加上@符号
NSLog(@"count = %d",count);
//输出结果:2014-12-08 15:48:02.612 KVC[83711:3714658] count = 3
//用kvc方式计算这个人所拥有狗的总总量
double subweight = [[pvalueForKeyPath:@"dogs.@sum.weight"]doubleValue];//调用系统函数则需要在属性前加上@函数名.
NSLog(@"subweight = %f",subweight);
//输出结果:2014-12-08 15:48:02.612 KVC[83711:3714658] subweight = 90.600000
}
- IOS之KVC
- IOS 之 KVC & KVO
- IOS之KVC
- iOS 之KVC简介
- iOS之KVC使用
- iOS之KVC和KVO
- iOS之KVC和KVO
- iOS之KVC和KVO
- IOS之KVC,KVO,KVB
- IOS SDK详解之KVC
- IOS SDK详解之KVC
- iOS开发之KVC、KVO
- iOS学习之KVO、KVC
- iOS开发之KVC/KVO
- iOS之KVC和KVO
- IOS开发之----KVC的使用
- iOS的观察者模式之:KVC&KVO
- iOS开发--Objective-C之KVC
- modelattribute用法
- 机器学习实战——kNN分类器
- 引用 CSS行高line-height属性理解及应用
- 数据库备份遇到的问题
- 在线升级,下载升级包过程中提示网络异常导致升级失败。
- IOS之KVC
- [LeetCode] Longest Common Prefix
- 理解prototype.js的bind函数
- Windows命令行下面编译一个Java文件需要引用另一个class文件解决办法
- DDoS攻击防御
- 我一定要赚好多好的钱,孝敬父母
- 什么是项目管理
- 兮°不要忽略Android中@id与@+id区别噢
- java的list用法