美文网首页
处理Model (二) 使用KVC 方法及其本质

处理Model (二) 使用KVC 方法及其本质

作者: 努力奔跑的小男孩 | 来源:发表于2017-10-11 17:36 被阅读9次

    .h文件

    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    @interface FlagItemModel : NSObject
    @property (nonatomic, copy)NSString *name;
    @property (nonatomic, strong) UIImage *icon; // 需要导入 #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: 实现原理
     1.先查看有没有对应的set方法, 如果有set方法,就会调用set方法,给对应的属性赋值;
     2.如果没有set方法,去查看有没有跟key值相同并且带有下划线(_)的成员属性,如果有的话,就给带有下划线(_)的成员属性赋值
     3.如果没有跟key值相同并且带有下划线(_)的成员属性,还会去找有没有跟key值相同名称的成员属性,如果有,就给它赋值.
     4.以上情况都没有,就直接崩溃
     */
    

    KVC本质

    字典转模型.png

    相关文章

      网友评论

          本文标题:处理Model (二) 使用KVC 方法及其本质

          本文链接:https://www.haomeiwen.com/subject/cjgwyxtx.html