作者:Mitchell
一、KVC简介
- 全名:key,value,coding
- 本质:调用set方法去修改类的成员变量。
二、 赋值方式:
- 第一种
Mitchell*v = [[Mitchell alloc] init];
[v setValue:@"aaa" forKey:@"name"];
- 第二种
Mitchell*v = [[Mitchell alloc] init];
[v setValue:@"aaa" forKeyPath:@"name"];
这种方式比第一种强大的多,因为我们可已传入路径,一个或者多个都 ok。
- 第三种:
KVC最牛逼的地方
,可以直接修改类的私有属性,这样做是原有的,并没有触碰苹果的私有API。这样的话在KVC的面前也就部分私有和不私有了。
Mitchell*v = [[Mitchell alloc] init];
[v setValue:@"aaa" forKeyPath:@"_name"];
- 第四种:给模型赋值,
NSDictionary*dic = @{@"name":@"jack",@"money":@"10"};
[model setValuesForKeysWithDictionary:dic]
上面的代码相当于:
model.name = dic[@"name"];
model.money = [dic[@"money"] doubleValue];
但是这个方法调用的只是 setValue:forKey的方法,如果模型中没有那个key 会报错,还有一种情况就是 模型中包含模型的话,他也无法给深层的模型赋值(不是无法赋值,而是直接把对应的字典赋给内层模型)。
三、 取值方式:
[model valueForKey:@"name"];
相当于model.name
这里还有一种写法:
//有一个装满模型的数组ModelArr;
NSArray*arr = [NSArray array];
arr = [ModelArr valueForKey(Path):@"name"];
//此行代码的意思是,将ModelArr数组中的模型元素的name值分别取出并存入一个数组返回。
四、拓展:
- @count
NSLog(@"%@",[model.books valueForKeyPath:@"@count"]);
这行代码的意思其实就是model.books.count
- min、max、avg(average)
NSLog(@"%@",[model.books valueForKeyPath:@"@min.price"]);
或者
[model valueForKeyPath:@"books.@min.price"]
这行代码的意思是返回模型的 books 数组中所有元素中price最小的值,最大、平均值同理改为 max 或 avg。