OC - 第八章(二) KVC

//                      第八章(二) 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值