博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS KVC运用代码详解
阅读量:6858 次
发布时间:2019-06-26

本文共 3499 字,大约阅读时间需要 11 分钟。

  hot3.png

一 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] cat12014-12-29 00:42:03.815 22KVC测试[2484:149139] cat22014-12-29 00:42:03.815 22KVC测试[2484:149139] cat32014-12-29 00:42:03.816 22KVC测试[2484:149139] =====forKey forKeyPath valueForKey valueForKeyPath 区别 ====2014-12-29 00:42:03.816 22KVC测试[2484:149139] 卧龙小 - cat42014-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=172014-12-29 00:42:03.817 22KVC测试[2484:149139] avg=5.66666666666666666666666666666666666662014-12-29 00:42:03.817 22KVC测试[2484:149139] min=5

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

你可能感兴趣的文章
(原创)android中使用相机的两种方式
查看>>
xcode 修改 organization name 和 company identifier
查看>>
[数分笔记]用Dedekind切割定理证明确界定理
查看>>
电子商城实录------项目目录的结构搭建及其说明
查看>>
Everyday Update
查看>>
企业内部信息化项目管理之我所见
查看>>
There is an overlap in the region chain修复
查看>>
手动配置网卡配置文件ifcfg-eth0
查看>>
重载(初学)
查看>>
《陶哲轩实分析》——给读者的一点建议
查看>>
python IO编程-StringIO和BytesIO
查看>>
线程同步中的锁
查看>>
Ubuntu 14.04安装Matlab 2013b
查看>>
【百度地图API】如何制作“从这里出发”“到这里去”——公交篇
查看>>
服务器请求
查看>>
java实现屏幕截屏功能
查看>>
实验四--恶意代码技术
查看>>
Golang 并发简介
查看>>
操作系统的启动(以Linux为例)
查看>>
课后作业
查看>>