ios kvc

来源:互联网 发布:usb网络共享用不了 编辑:程序博客网 时间:2024/05/23 10:53

kvc,就是key value coding(键值编码)

KVC的操作方法由NSKeyValueCoding协议提供,而NSObject就实现了这个协议,也就是说ObjC中几乎所有的对象都支持KVC操作,常用的KVC操作方法如下:

  • 动态设置: setValue:属性值 forKey:属性名(用于简单路径)setValue:属性值 forKeyPath:属性路径(用于复合路径,例如Person有一个Book类型的属性,那么person.Book就是一个复合属性)
  • 动态读取: valueForKey:属性名 valueForKeyPath:属性名(用于复合路径)

下面通过一个例子来理解KVC

        Book *book = [[Book alloc] init];
        book.name = @"葵花宝典";
        
        Person *person = [[Person alloc] init];
        person.name = @"Jack";
        person.age = 5;
        person.book = book;
        NSString *pName = [person valueForKey:@"name"];
        NSLog(@"%@", pName);//输出结果是jack

        NSString *bName = [person valueForKeyPath:@"book.name"];
        NSLog(@"%@", bName);//输出结果是葵花宝典


       NSString *bName1 =  [person.book valueForKeyPath:@"name"];
        NSLog(@"%@", bName1);//输出结果是葵花宝典


   Person *p = [[Person alloc] init];
    p.name = @"Jack";
    p.age = 10;
    
    Person *p1 = [[Person alloc] init];
    p1.name = @"Rose";
    p1.age = 40;
    
    Person *p2 = [[Person alloc] init];
    p2.name = @"Jim";
    p2.age = 19;
    
    NSArray *persons = @[p, p1, p2];
    // 取出persons数组中所有person对象的name属性值
    NSArray *names = [persons valueForKeyPath:@"name"];

    NSLog(@"%@", names);//输出结果是jack,rose,jim


            [p setValue:@"Jack" forKeyPath:@"name"];
            [p setValue:@"50" forKeyPath:@"age"];
    
            NSString *name = [p valueForKeyPath:@"name"];
            int age = [[p valueForKeyPath:@"age"] intValue];
            NSDictionary *dict = [p dictionaryWithValuesForKeys:@[@"name"]];
            NSLog(@"-------%@", dict);

1 0
原创粉丝点击