KVC实例代码

pragma mark 获取单个值

    NSString *name =  [p valueForKey:@"name"];
    double money = [[p valueForKey:@"money"] doubleValue];
    
    #pragma mark 获取多层值
    //NSString *PName = [p valueForKey:@"person.name"];
    NSString *PName = [p valueForKeyPath:@"person.name"];
   
    #pragma mark 模型转字典
    NSDictionary *dict = [p dictionaryWithValuesForKeys:@[@"name", @"money"]];
     
    #pragma mark 获取数组中对象的值
    Person *p1 = [Person new];
    p1.name = @"hh";
    p1.money = 111;

    Person *p2 = [Person new];
    p2.name = @"ll";
    p2.money = 222; 

    Person *p3 = [Person new];
    p3.name = @"vv";
    p3.money = 333;

    NSArray *arr = @[p1, p2, p3];

    // 如果数组中的元素都是同一种类型的数据, 可以使用KVC获取数组中所有对象的某个属性的值
    NSArray *res = [arr valueForKeyPath:@"name"]; 

    #pragma mark 运算符
    id res1 = [arr valueForKeyPath:@"@avg.money"];

    #pragma mark 单个值
    [p setValue:@"lmj" forKey:@"name"];

    #pragma mark 多层赋值  
    [p setValue:@"xiaoqiang" forKeyPath:@"dog.name"];
    [p setValue:@(110) forKeyPath:@"dog.price"];

    #pragma mark 给私有成员变量赋值 
    /*
     //    [p setValue:@"cjp" forKey:@"_name"];
     //    [p setValue:@(30) forKey:@"_age"];

     //    SEL sel = @selector(say);
     //    [p performSelector:sel];
     //    [p say];
     */

    #pragma mark 字典转模型  

    NSDictionary *dict = @{
                           @"name":@"xxx",
                           @"money": @(998.1),
                           //                           @"score":@(100)
                           @"dog":@{
                                   @"name":@"wangcai",
                                   @"price":@(110)
                                   }
                           };

    //    p.name = dict[@"name"]; 
    //    p.money = [dict[@"money"] doubleValue];
       
    [p setValuesForKeysWithDictionary:dict];

你可能感兴趣的:(KVC实例代码)