OC - 第八章(二) KVC

来源:互联网 发布:工作站品牌 知乎 编辑:程序博客网 时间:2024/04/30 08:43
//                      第八章(二) KVC        //KVC key-value-coding 键值编码 间接访问实例变量        //KVO key-value-observer 键值观察者 观察某个实例变量是否发生变化        //key:键,⽤用于标识实例变量        //vlaue:实例变量对应的值        Person *per = [[Person alloc]init];        per.name = @"志玲";        [per setValue:@"志玲" forKey:@"_name"];        NSLog(@"%@",per.name);        NSLog(@"%@",[per valueForKey:@"_name"]);        //不给_number添加setter getter方法; 甚至_number是private 都能给它赋值//        所以一般不会让别人知道有什么变量        [per setValue:@"12" forKey:@"_number"];        [per printfNumber];        [per setValue:@"LOL" forKey:@"_hobby"];        [per printfNumber];        NSLog(@"%@",[per valueForKey:@"_number"]);        Telephone *phone = [[Telephone alloc]init];        per.phone = phone;        per.phone.phoneNumber = @(13954638766);        NSLog(@"%@",per.phone.phoneNumber);        //通过KVC访问属性的属性, 通过路径访问        [per setValue:@"iPhone" forKeyPath:@"_phone._brand"];        NSLog(@"%@", per.phone.brand);        NSLog(@"%@", [per valueForKeyPath:@"_phone._brand"]);        //利用字典给对象的属性赋值        NSDictionary *dic = @{@"brand":@"sumsung", @"phoneNumber":@"231" ,@"color":@"purple", @"heihei":@"是我"};        Telephone *pho = [[Telephone alloc]init];        [pho setValuesForKeysWithDictionary:dic];        NSLog(@"%@ %@",pho.brand, pho.phoneNumber);        //对于不存在对象的属性 会自动调用setValue:forUndefinedKey://        系统默认实现是抛出⼀个异常; 因此需要在.m文件实现方法://利用kvc给本类对象赋值时,如果没有与key对应的实例变量的话, 系统会自动调用方法        -(void)setValue:(id)value forUndefinedKey:(NSString *)key{            NSLog(@"不包括%@",key);//容错手段            NSLog(@"%@",value);            //_brand = value;            if ([key isEqualToString:@"color"]) {                _colour = value;            }        }
0 0
原创粉丝点击