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