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"];

    //取得私有的值(heightPersion@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

    

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

    p.dog = [[Dogalloc]init];

    p.dog.name =@"hah";

    

    //利用kvc取得pdog属性的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];

    

    //dogsp的属性,这个人拥有多少只狗,类型为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

}


0 0
原创粉丝点击