IOS之KVC


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 =  [[Persion alloc]init];

    p.age = 20;

    //取公有值

    id age = [p valueForKey:@"age"];

    //取得私有的值(heightPersion@private)

    id height = [p valueForKey:@"height"];

    NSLog(@"age = %d, height = %f",[age intValue],[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",[[p valueForKey:@"height"] floatValue]);

    //输出结果:2014-12-08 15:48:02.612 KVC[83711:3714658] 修改后的height=1.200000

    

    //dogp的属性,类型为Dogdog中有nameweight属性

    p.dog = [[Dog alloc]init];

    p.dog.name = @"hah";

    

    //利用kvc取得pdog属性的name的值

    [p valueForKeyPath:@"dog.name"];

    

    //小结:

//    1.valueForKey只能访问对象的属性

//    2.valueForKeyPath能通过.语法,一层一层的访问内部属性

    

    Dog *d1 = [[Dog alloc]init];

    d1.name = @"D1";

    d1.weight = 20.2;

    Dog *d2 = [[Dog alloc]init];

    d2.name = @"D2";

    d2.weight = 30.2;

    Dog *d3 = [[Dog alloc]init];

    d3.name = @"D3";

    d3.weight = 40.2;

    p.dogs = @[d1,d2,d3];

    

    //dogsp的属性,这个人拥有多少只狗,类型为NSArray

    //kvc取出这个人拥有的狗的个数

    int count = [[p valueForKeyPath:@"dogs.@count"] intValue];//NSArray为系统的类,则需要加上@符号

    NSLog(@"count = %d",count);

    //输出结果:2014-12-08 15:48:02.612 KVC[83711:3714658] count = 3

    //kvc方式计算这个人所拥有狗的总总量

    double subweight = [[p valueForKeyPath:@"dogs.@sum.weight"] doubleValue];//调用系统函数则需要在属性前加上@函数名.

    NSLog(@"subweight = %f",subweight);

    //输出结果:2014-12-08 15:48:02.612 KVC[83711:3714658] subweight = 90.600000

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值