kvc
也就是key-value-coding,即键值编码,通常是用来给某一个对象的属性进行赋值.
用法:
1.对私有变量进行赋值
2.字典转模型
注意事项:
1.字典转模型的时候,字典中的某一个key一定要在模型中有对应的属性
2.如果一个模型中包含了另外的模型对象,是不能直接转化成功的。
3.通过kvc转化模型中的模型,也是不能直接转化成功的。
Lock *lock = [[Lock alloc] init];
lock.name = smart_lock;
lock.password = 000000;
假如name是私有变量,就无法外部赋值,kvc可以做到,如下:
[lock setValue:@“smart_lock1” forKey:@"name"];
or
[lock setValue:@“smart_lock1” forKeyPath:@"name"];
区别呢?---》
LockBluetooth *bluetooth = [[LockBluetooth alloc] init];
lock.ble = bluetooth ;
又是私有变量
[lock setValue:@"aa:bb:cc:dd:ee:ff" forKeyPath:@"ble.mac"];
说明对某一个属性进行赋值,可以不用加下划线,而且它的查找规则应该是:先查找和直接写入的字符串相同的成员变量,如果找不到就找以下划线开头的成员变量。
kvc除了访问私有变量这个用处外,还可以用于字典转模型。在Person类对外提供一个接口,将转模型的工作放在模型中进行
- (instancetype)initWithDict:(NSDictionary*)dict{
if(self = [super init]) {
[self setValuesForKeysWithDictionary:dict];
}
return self;
}
调用:
NSDictionary*PersonDict = @{@"name":@"smart_lock1",@"password":@"000000"}; Lock *lock1 = [Lock personWithDict:lock];