KVC介绍:1 - 使用KVC进行赋值取值
KVC简介
KVC(Key-value coding)即键值编码,对应了NSKeyValueCoding类。NSKeyValueCoding类是对NSObject类进行的扩展,因此所有的类都可以使用NSKeyValueCoding类中定义的方法。其最基本的使用就是可以对对象属性进行赋值和取值,可以起到和点语法同样的效果。
在KVC中针对对象属性的赋值和取值提供了如下几种常用的方法。
- 赋值方法
- (void)setValue:(nullable id)value forKey:(NSString *)key; //简易路径赋值
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath; //复合路径赋值
- 取值方法
- (nullable id)valueForKey:(NSString *)key; //简易路径取值
- (nullable id)valueForKeyPath:(NSString *)keyPath; //复合路径取值
示例代码
为了学习KVC的用法,我们预先定义两个类Person类和Dog类,其中Person类中有一个dog属性,如下所示。
- Person.h
#import <Foundation/Foundation.h>
#import "Dog.h"
@interface Person : NSObject
@property (nonatomic, copy) NSString *personName;
@property (nonatomic, strong) Dog *dog;
@end
- Dog.h
#import <Foundation/Foundation.h>
@interface Dog : NSObject
@property (nonatomic, copy) NSString *dogName;
@property (nonatomic, copy) NSNumber *dogAge;
@end
下方的示例代码综合使用了KVC中有关赋值/取值的方法。
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
Dog *dog = [[Dog alloc] init];
//使用KVC设值
[dog setValue:@"tom" forKey:@"dogName"];
[person setValue:@"shixin" forKey:@"personName"];
[person setValue:dog forKey:@"dog"];
[person setValue:@2 forKeyPath:@"dog.dogAge"];
//使用KVC取值
NSString *personName = [person valueForKey:@"personName"];
NSString *dogName = [person valueForKeyPath:@"dog.dogName"];
NSNumber *dogAge = [person valueForKeyPath:@"dog.dogAge"];
NSLog(@"<%@>的宠物狗名叫<%@>, 它<%@>岁了.",personName,dogName,dogAge);
}
return 0;
}
运行结果:
示例代码
https://github.com/99ios/5.4.1