KVC使用场景总结
来源:互联网 发布:如何做好淘宝售后服务 编辑:程序博客网 时间:2024/06/07 00:56
KVC使用场景总结
1.KVC简单赋值(公有、私有属性)
Boy.h
#import <Foundation/Foundation.h>@interface Boy : NSObject@property(nonatomic,strong) NSString *name;@property(nonatomic,assign) NSInteger age;@property(nonatomic,strong) NSString *city;- (void)logTest;@endBoy.m
#import "Boy.h"@interface Boy ()@property(nonatomic,strong) NSString *sport;@end@implementation Boy- (void)logTest{ NSLog(@"sport : %@",self.sport);}@end在 vc 中使用 kvc
- (void)kvcLearn{ Boy *jack = [[Boy alloc] init]; [jack setValue:@"Jack" forKey:@"name"]; [jack setValue:@"18" forKey:@"age"]; [jack setValue:@"football" forKey:@"sport"]; NSLog(@"jack.name : %@",jack.name); NSLog(@"jack.age : %ld",jack.age); [jack logTest]; NSLog(@"jack.sport : %@",[jack valueForKey:@"sport"]);}可以访问并使用公私有属性。
2.复杂属性赋值
当 Boy 有一个其它类型属性 Book 的属性时候:
Boy *jack = [[Boy alloc] init]; jack.book = [[Book alloc] init]; [jack.book setValue:@"iOS" forKeyPath:@"name"]; //方式一 [jack setValue:@"C++" forKeyPath:@"book.name"]; //方式二
3.添加私有成员变量
[jack setValue:@"182" forKeyPath:@"_height"];
4.字典转模型
NSDictionary *dic = @{@"name":@"book", @"num" : @"66"}; GoodModel *model = [[GoodModel alloc] init]; [model setValuesForKeysWithDictionary:dic]; NSLog(@"model.name : %@",model.name); NSLog(@"model.num : %@",model.num);但是,如果 model 属性和 dic 不匹配会怎样?
第一种情况,model多一个属性:这样程序没问题,model多出的属性会是nil
第二种情况,model少一个属性:程序会崩溃
第三种情况,model的属性名字和dic的key不匹配 : 程序会崩溃
第二种和第三种崩溃的解决办法是重写方法 -(void)setValue:(id)value forUndefinedKey:(NSString *)key
例如下面:
GoodModel.h
#import <Foundation/Foundation.h>@interface GoodModel : NSObject@property(nonatomic,copy) NSString *name;@property(nonatomic,copy) NSString *num;@property(nonatomic,copy) NSString *goodId;@end
GoodModel.m
#import "GoodModel.h"@implementation GoodModel- (void)setValue:(id)value forUndefinedKey:(NSString *)key{ if([key isEqualToString:@"id"]){ self.goodId = (NSString *)value; }}@end
VC中
NSDictionary *dic = @{@"name":@"book", @"num" : @"66", @"id":@"123"}; GoodModel *model = [[GoodModel alloc] init]; [model setValuesForKeysWithDictionary:dic]; NSLog(@"model.name : %@",model.name); NSLog(@"model.num : %@",model.num); NSLog(@"model.goodId : %@",model.goodId);这样就实现了把 dic 中 id 数据赋值给了 model 中的 goodId。
5.模型转字典
NSDictionary *dic = @{@"name":@"book", @"num" : @"66", @"id":@"123"}; GoodModel *model = [[GoodModel alloc] init]; [model setValuesForKeysWithDictionary:dic]; NSDictionary *modelDic = [model dictionaryWithValuesForKeys:@[@"name",@"num",@"goodId"]]; NSLog(@"modelDic : %@", modelDic);
阅读全文
2 0
- KVC使用场景总结
- 【iOS】KVC 和 KVO 的使用场景
- 【iOS】KVC 和 KVO 的使用场景
- 【iOS】KVC 和 KVO 的使用场景
- KVC 和 KVO 的使用场景
- KVC 和 KVO 的使用场景
- 【iOS】KVC 和 KVO 的使用场景
- 【iOS】KVC 和 KVO 的使用场景
- 【iOS】KVC 和 KVO 的使用场景
- git 使用场景总结
- Git使用场景总结
- Retrofit使用场景总结
- ZooKeeper使用场景总结
- kvc总结
- KVC总结
- KVC使用
- ZooKeeper典型使用场景总结
- Docker的使用场景总结
- git 开发分支图解
- discuz x3 手机版 触屏版 开启 站外图片显示
- 微擎 用户是否已关注公众号
- http-server
- Retrofit源码解析
- KVC使用场景总结
- React Native之手势bug
- Java获取请求类型(Java获取浏览器请求类型;Java获取接口请求类型;微信公众号开发)
- Android MediaCodec硬解码AAC音频文件并播放
- 冒泡排序(bubble sort)(另一种选择排序)
- 大数据可视化系统,为电力产业升级带来最强驱动力
- [LeetCode] 114. Flatten Binary Tree to Linked List
- label上文字数字混排,只改变数字颜色
- ubuntu下解决vim中文乱码的问题