现在是举例时间.如果没时间看的的朋友可以直接看最底下的的方法
标题说的这个共有可能有点模糊,以一下的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映射到抽离出的模型里头去.自此我们完成了我们的需求.