KVC的几种常用方法

KVC的使用1:

以Person为例:

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;

@end

 

属性的方法:

Person *person = [[Person alloc] init];

person.name = @"大锤";

NSLog(@"%@", person.name);

 

KVC方法:

Person *person = [[Person allocinit];

[person setValue:@"盖聂" forKey:@"name"];

NSLog(@"%@", [person valueForKey:@"name"]);

 

 

KVC的使用2:

还是以Person为例:

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *gender;

@end

 

属性方法:

Person *person = [[Person allocinit];

person.name = @"大锤";

person.gender = @"男";

NSLog(@"%@", person.name);

 

KVC方法:

Person *person = [[Person allocinit];

NSDictionary *dict = @{@"name" : @"哈哈哈", @"gender" : @"man"};

[person setValuesForKeysWithDictionary:dict];

NSLog(@"%@, %@", [person valueForKey:@"name"], [person valueForKey:@"gender"]);

 

 

KVC的使用3:

以Person和Teacher为例:

@class Teacher;

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *gender;

@property (nonatomic, retain) Teacher *tea;

@end

 

@interface Teacher : NSObject

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *sex;

@property (nonatomic, assign) NSInteger age;

@end

 

属性的方法:

Person *p = [[Person alloc] init];

Teacher *t = [[Teacher alloc] init];

p.tea = t;

t.name = @"哈哈哈";

NSLog(@"%@", p.tea.name);

 

KVC的方法:

Person *person = [[Person alloc] init];

Teacher *t = [[Teacher allocinit];

 

[person setValue:t forKey:@"teacher"];

[person setValue:@"卫庄" forKeyPath:@"tea.name"];

NSLog(@"%@", [person valueForKeyPath:@"tea.name"]);

其实如果我们Person类重写init的话:

- (instancetype)init {

    if (self = [super init]) {

        _tea = [[Teacher alloc] init];

    }

    return self;

}

就可以直接像下面这么写了:

Person *person = [[Person alloc] init];

[person setValue:@"卫庄" forKeyPath:@"tea.name"];

NSLog(@"%@", [person valueForKeyPath:@"tea.name"]);

 

 

转载于:https://www.cnblogs.com/zhizunbao/p/5346065.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值