IOS|IOS KVC运用代码详解
为什么80%的码农都做不了架构师?>>>
文章图片
一 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
推荐阅读
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- 排序(归并排序)
- 接口|axios接口报错-参数类型错误解决
- iOS|iOS 笔记之_时间戳 + DES 加密
- iOS,打Framework静态库