IOS|IOS KVC运用代码详解

为什么80%的码农都做不了架构师?>>>IOS|IOS KVC运用代码详解
文章图片

一 KVC简介 KVC,即是指 NSKeyValueCoding,提供一种机制来间接访问对象的属性。常用于字典转模型,或者用于模型转字典,继承于NSObject 类,子类可用直接使用。




二 KVC赋值

//可以给当前对象属性赋值 - (void)setValue:(id)value forKey:(NSString *)key; //可以给对象的属性的属性赋值(推荐使用) - (void)setValue:(id)value forKeyPath:(NSString *)keyPath; //字典转对象 - (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;




注意:

forKey只能给当前对象属性赋值。

例如:[self setVale:@"wlx" forkey:@"name"]。


forKeyPath 可以给对象的属性的属性赋值。
例如:[self setVale:@"thinkpad" forkeypath:@"person.computer"]。




二 字典转模型
- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;


注意:要求字典中的key 和对象属性要求一样




三 模型转字典
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys; //实例: NSDictionary *dic = [self.dataArray dictionaryWithValuesForKeys:@[@"name",@"age"]]; for (int i =0 ; i






四 KVC取值
//只能获取对象属性的值 - (id)valueForKey:(NSString *)key; //可以获取对象属性的属性的值(推荐使用) - (id)valueForKeyPath:(NSString *)keyPath;






五 KVC运算 KVC 可用进行简单的运算,例如 sum avg min 的运算。
[array valueForKeyPath:@"@sum.age"];
NSLog(@"sum=%@",[self.dataArray valueForKeyPath:@"@sum.age"]); NSLog(@"avg=%@",[self.dataArray valueForKeyPath:@"@avg.age"]); NSLog(@"min=%@",[self.dataArray valueForKeyPath:@"@min.age"]);






六 注意事项 KVC需要把字符串属性名称转换后才能赋值,调用的set方法,性能消耗较高




七 代码 7.1 ViewController
#import "ViewController.h" #import "Cat.h" #import "Person.h"@interface ViewController () @property (nonatomic,strong) NSArray *dataArray; @end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; /** KVC 测试 **///1.KVC 设置Cat 值 NSLog(@"=====KVC 设置Cat 值字段转模型===="); for (int i=0; i




7.2Cat类
===cat.h=== @interface Cat : NSObject/** *年龄 */ @property (nonatomic,assign)NSInteger age; /** *名字 */ @property (nonatomic,copy)NSString *name; /** *构造方法 * *@param dic <#dic description#> * *@return <#return value description#> */ -(instancetype)initWithDic:(NSDictionary *)dic; +(instancetype)catWithDic:(NSDictionary *)dic; @end===cat.m===#import #import "Cat.h"@implementation Cat -(instancetype)initWithDic:(NSDictionary *)dic { if (self = [super init]) {/** KVC 字典转模型 **/ //1 通过 setValue 方法//[self setValue:dic[@"name"] forKey:@"name"]; //[self setValue:dic[@"age"] forKeyPath:@"age"]; //2 字典转模型 [self setValuesForKeysWithDictionary:dic]; } return self; }+(instancetype)catWithDic:(NSDictionary *)dic { return [[self alloc]initWithDic:dic]; } @end






7.3 person类
===person.h=== #import "Cat.h"@interface Person : NSObject/** *名字 */ @property (nonatomic,copy)NSString *name; /** *拥有的猫 */ @property (nonatomic,strong)Cat *cat; @end===person.m=== #import #import "Person.h"@implementation Person @end




7.4 输出
2014-12-29 00:42:03.814 22KVC测试[2484:149139] =====KVC 设置Cat 值字段转模型==== 2014-12-29 00:42:03.815 22KVC测试[2484:149139] cat1 2014-12-29 00:42:03.815 22KVC测试[2484:149139] cat2 2014-12-29 00:42:03.815 22KVC测试[2484:149139] cat3 2014-12-29 00:42:03.816 22KVC测试[2484:149139] =====forKey forKeyPath valueForKey valueForKeyPath 区别 ==== 2014-12-29 00:42:03.816 22KVC测试[2484:149139] 卧龙小 - cat4 2014-12-29 00:42:03.816 22KVC测试[2484:149139] =====模型转字典 ==== 2014-12-29 00:42:03.816 22KVC测试[2484:149139] ( cat1, cat2, cat3 ) 2014-12-29 00:42:03.816 22KVC测试[2484:149139] ( 5, 7, 5 ) 2014-12-29 00:42:03.816 22KVC测试[2484:149139] =====kvc运算==== 2014-12-29 00:42:03.816 22KVC测试[2484:149139] sum=17 2014-12-29 00:42:03.817 22KVC测试[2484:149139] avg=5.6666666666666666666666666666666666666 2014-12-29 00:42:03.817 22KVC测试[2484:149139] min=5


【IOS|IOS KVC运用代码详解】

转载于:https://my.oschina.net/wolx/blog/361762

    推荐阅读