最近写接口数据的时候,团队不太喜欢自己对Model命名,喜欢直接取后台返回的数据,所以经常用到MJExtension这个第三方库。
不过感觉还是挺好用的,把最近项目中用到的笔记记一下:
实例:
函数:mj_objectArrayWithKeyValuesArray
这个我项目中主要是将列表返回数据进行转化成Model,先建立模型,然后将列表数据赋值给Model
[接口调用完成 WithCompletion:^(NSArray *ret, EnError *error) {
//这里就是赋值了 将ret里的数据拿出来
NSMutableArray = [模型 mj_objectArrayWithKeyValuesArray:ret];
}];
MJExtension里面的函数是这个:
具体实现 可以导入工程里面去看看
#pragma mark - 字典数组 -> 模型数组
+ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray
{
return [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:nil];
}
然后就是在上传数据的时候做处理的方法了。
一般做数据POST请求的话,传的参数大部分参数都是字典类型的params。
我们项目团队习惯先将所有数据建模,所以请求的时候还需要做转换,要是一个个去比对转换太麻烦了。
MJExtension里面有一个mj_keyValues
Model *model = [[Model alloc] init];
model.data1 = data[@""];
model.data2 = data[@""];
//用一个可变字典做接收,转出来的就是一个以data1和data2为键的字典了。
NSMutableDictionary *params = [model mj_keyValues];
MJExtension里面的函数是这个:
#pragma mark - 模型 -> 字典
- (NSMutableDictionary *)mj_keyValues
{
return [self mj_keyValuesWithKeys:nil ignoredKeys:nil];
}
最后还有一个经常要用到的函数:mj_setupReplacedKeyFromPropertyName
这个的话太关键了。
项目中,后台经常会用id命名有木有?但是你直接取值建模呢,id是不能用来命名的会红对吧。
所以就需要mj_setupReplacedKeyFromPropertyName
来对需要制定的键来做处理
在你接口调用数据的前面加上一个:
[Model mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
//将你需要转换的id写上 对应后台返回的id
//当然如果你需要转换很多,在字典里面加就行了
return @{ @"ModelId" : @"id" };
}];
主要这个函数我不太清楚是不是需要每个接口调用的时候都需要写在前面,还是说只要在工程里面写一次就行了,希望后面有人能知会我一下,感激不尽。。
MJExtension里面的函数是这个:
#pragma mark - key配置
+ (void)mj_setupReplacedKeyFromPropertyName:(MJReplacedKeyFromPropertyName)replacedKeyFromPropertyName
{
[self mj_setupBlockReturnValue:replacedKeyFromPropertyName key:&MJReplacedKeyFromPropertyNameKey];
[[self dictForKey:&MJCachedPropertiesKey] removeAllObjects];
}
网友评论