美文网首页
iOS点滴记录-KVC

iOS点滴记录-KVC

作者: 小恶魔之意 | 来源:发表于2016-07-09 14:50 被阅读25次

    KVC

    - key valued coding 键值编码

    常用方法

    setValue:forKey:(为对象的属性赋值)
    setValue: forKeyPath:(为对象的属性赋值(包含了setValue:forKey:的功能,并且还可以对对象内的类的属性进行赋值))
    valueForKey:(根据key取值)
    valueForKeyPath:(根据keyPath取值)
    setValuesForKeysWithDictionary:(对模型进行一次性赋值)
    • 举个🌰
    //创建一个Person类 有姓名、年龄2个属性
    import <Foundation/Foundation.h>
    @interface Person : NSObject
    @property(nonatomic,copy)NSString *name;
    @property(nonatomic,assign) int age;
    // 后面🌰使用
    @property(nonatomic,strong)Book *book;
    @end
    //实例化p1 使用kvc修改对象属性值
    Person *p1=[[Person alloc]init];
    [p1 setValue:@"yangyong" forKeyPath:@"name"];
    [p1 setValue:@"23" forKeyPath:@"age"];
    
    1. 使用KVC间接修改对象属性时,系统会自动判断对象属性的类型,并完成转换。如该程序中的“23”
    2. KVC按照键值路径取值时,如果对象不包含指定的键值,会自动进入对象内部,查找对象属性
    //实例化p2
    Person *p2 = [[Person alloc] init];
    [p2 setValue:@"lilei" forKeyPath:@"name"];
    [p2 setValue:@"12" forKeyPath:@"age"];
    //把name存入数组
    NSArray *persons = @[p1,p2];
    NSMutableArray *arrayM=[NSMutableArray array];
    [arrayM addObject:[persons valueForKeyPath:@"name"]];
    @interface Book : NSObject
    @property(nonatomic,copy)NSString *bookname;
    @end
    Book *b1 = [[Book alloc] init];
    p1.book = b1;
    [p1 setVaule:@"ios" forKayPath:@"book.bookname"];
    Book *b2 = [[Book alloc] init];
    p2.book = b2;
    [p2 setValue:@"iphone" forKayPath:@"book.bookname"];
    //把bookname存入数组
    NSMutableArray *arrayM=[NSMutableArray array];
    [arrayM addObject:[persons valueForKeyPath:@"book.bookname"]];
    

    KVC在按照键值路径取值时,会自动层层深入,获取对应的键值(用KVC取一个嵌套层次很深的路径的时候,只要给它一个路径就能把想要的属性给拿出来。(.可以理解为路径。一直一直进入)。能够帮助我们很方便的编码 。)

    相关文章

      网友评论

          本文标题:iOS点滴记录-KVC

          本文链接:https://www.haomeiwen.com/subject/zigrjttx.html