YYModel之抽离出共有模型

现在是举例时间.如果没时间看的的朋友可以直接看最底下的的方法

标题说的这个共有可能有点模糊,以一下的Json文件举个例子

{
    "areas" : [
        "country" : {
            name : "China",
            code : "1234567"
            provinces : [
                {
                    "name" : "Hubei",
                    "code" : "123131233321",
                    "towns" : [
                        "name" : "wuhan",
                        "code" : "6545453",
                        "areas" : [
                            {
                                "name" : "wuchang",
                                "code" : "123131233321",
                            }
                        ]
                    ]
                }
            ]
        }
    ]
}

上面用一个国家、省份、市、区的json来举个例子.

大家可以看到下面的两个属性是通用的

"name"
"code"

如果后台返回是按照我上面的来返回的话.我们按照普通流程可能是这么创立模型的

@interface CountryModel ()

/// 名字
@property (nonatomic ,strong) NSString *name;

/// 地址编码
@property (nonatomic ,strong) NSString *code;

/// 省数组
@property (nonatomic ,strong) NSArray <ProvincesModel *> *provinces;

@end

@implementation CountryModel ()

/// 让碰到provinces字段的时候自动和provinces配对.使用ProvincesModel去字典转模型
+ (NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass {
    return @{
             @"provinces" : [ProvincesModel class]
             };
}

@end

上面只拿了国家模型举个例子.那么我们需要一直写几个重复的字段.

那么我们能不能把name和code抽出来呢.


地区模型

/// AreaModel
@interface AreaModel ()

/// 名字
@property (nonatomic ,strong) NSString *name;

/// 地址编码
@property (nonatomic ,strong) NSString *code;

@end

@implementation AreaModel ()

@end

国家模型

@interface CountryModel ()

/// 区域模型.包含名字和code
@property (nonatomic ,strong) AreaModel *areaModel;

/// 省数组
@property (nonatomic ,strong) NSArray <ProvincesModel *> *provinces;

@end

然而直接使用YYModel转换的时候去取countryModel.areaModel的值却是一个空的.

下面我要介绍一个方法.来把把字段映射到抽离出的模型里头去

@implementation CountryModel ()

- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic {
    /// 标题Model
    self.areaModel = [AreaModel modelWithJSON:dic];
    return YES;
}

/// 让碰到provinces字段的时候自动和provinces配对.使用ProvincesModel去字典转模型
+ (NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass {
    return @{
             @"provinces" : [ProvincesModel class]
             };
}

@end

使用- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic;方法可以把json映射到抽离出的模型里头去.自此我们完成了我们的需求.

猜你喜欢

转载自blog.csdn.net/qq_18683985/article/details/81702461
今日推荐