.h
文件
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface FlagItemModel : NSObject
@property (nonatomic, copy)NSString *name;
@property (nonatomic, strong) UIImage *icon; // 需要導(dǎo)入 #import <UIKit/UIKit.h>
+ (instancetype)initWithDict:(NSDictionary *)dict;
@end
.m
文件
#import "FlagItemModel.h"
@implementation FlagItemModel
+(instancetype)initWithDict:(NSDictionary *)dict{
FlagItemModel *model = [[FlagItemModel alloc]init];
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[model setValue:obj forKeyPath:key];// KVC方法
}];
return model;
}
//這里利用KCV的特性
- (void)setIcon:(UIImage *)icon{
NSString *imageName = (NSString *)icon;
_icon = [UIImage imageNamed:imageName];
}
@end
/**
setValue: forKeyPath: 實(shí)現(xiàn)原理
1.先查看有沒有對(duì)應(yīng)的set方法, 如果有set方法,就會(huì)調(diào)用set方法,給對(duì)應(yīng)的屬性賦值;
2.如果沒有set方法,去查看有沒有跟key值相同并且?guī)в邢聞澗€(_)的成員屬性,如果有的話,就給帶有下劃線(_)的成員屬性賦值
3.如果沒有跟key值相同并且?guī)в邢聞澗€(_)的成員屬性,還會(huì)去找有沒有跟key值相同名稱的成員屬性,如果有,就給它賦值.
4.以上情況都沒有,就直接崩潰
*/
KVC
本質(zhì)
字典轉(zhuǎn)模型.png