OC KVC的使用

194 阅读1分钟
  • KVC:键值对,可以赋值,可以取值

KVC赋值

  • 简单使用
// 自动类型转换
[person setValue:@"133" forKey:@"money"];
 // 自动类型转换
[person setValue:@"王五" forKeyPath:@"name"];
  • forKey,forKeyPath区别:
/*
     forKey和forKeyPath
     1>forKeyPath 包含了所有 forKey 的功能
     2>forKeyPath 进行内部的点语法,层层访问内部的属性
     3>注意: key值一定要在属性中找得到
     */
    //[person.dog setValue:@"阿黄" forKey:@"name"];
    [person setValue:@"旺财" forKeyPath:@"dog.name"];
  • 利用KVC修改类的私有成员变量(UIPageControl) [person setValue:@"88" forKeyPath:@"_age"]; // age或_age都可以写

KVC字典与模型

  • 字典转模型

    开发中是不建议使用setValuesForKeysWithDictionary:

    1> 字典中的key必须在模型的属性中找到

    2> 如果模型中带有模型,setValuesForKeysWithDictionary不好使

    应用场景: 简单的字典转模型

XMGPerson *person = [[XMGPerson alloc] initWithDict:dict];
//------------------------------------------------
- (instancetype)initWithDict:(NSDictionary *)dict{
    if (self = [super init]) {
        /*
        self.name = dict[@"name"];
        self.money = [dict[@"money"] floatValue];
         */
        [self setValuesForKeysWithDictionary:dict];
    }
    return self;
}
  • 模型转字典 NSDictionary *dict = [person dictionaryWithValuesForKeys:@[@"name", @"money"]];

KVC取值

  • 单个取值:NSLog(@"%@ --- %.2f", [person valueForKeyPath:@"name"], [[person valueForKey:@"money"] floatValue]);
  • 取出数组中所有模型的某个属性值
NSArray *allPersons = @[person1, person2, person3];
NSArray *allPersonName = [allPersons valueForKeyPath:@"name"];