最近寫接口數(shù)據(jù)的時(shí)候攻柠,團(tuán)隊(duì)不太喜歡自己對(duì)Model命名赃磨,喜歡直接取后臺(tái)返回的數(shù)據(jù)立由,所以經(jīng)常用到MJExtension這個(gè)第三方庫(kù)轧钓。
不過(guò)感覺(jué)還是挺好用的,把最近項(xiàng)目中用到的筆記記一下:
實(shí)例:
函數(shù):mj_objectArrayWithKeyValuesArray
這個(gè)我項(xiàng)目中主要是將列表返回?cái)?shù)據(jù)進(jìn)行轉(zhuǎn)化成Model锐膜,先建立模型毕箍,然后將列表數(shù)據(jù)賦值給Model
[接口調(diào)用完成 WithCompletion:^(NSArray *ret, EnError *error) {
//這里就是賦值了 將ret里的數(shù)據(jù)拿出來(lái)
NSMutableArray = [模型 mj_objectArrayWithKeyValuesArray:ret];
}];
MJExtension里面的函數(shù)是這個(gè):
具體實(shí)現(xiàn) 可以導(dǎo)入工程里面去看看
#pragma mark - 字典數(shù)組 -> 模型數(shù)組
+ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray
{
return [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:nil];
}
然后就是在上傳數(shù)據(jù)的時(shí)候做處理的方法了。
一般做數(shù)據(jù)POST請(qǐng)求的話道盏,傳的參數(shù)大部分參數(shù)都是字典類型的params而柑。
我們項(xiàng)目團(tuán)隊(duì)習(xí)慣先將所有數(shù)據(jù)建模,所以請(qǐng)求的時(shí)候還需要做轉(zhuǎn)換荷逞,要是一個(gè)個(gè)去比對(duì)轉(zhuǎn)換太麻煩了媒咳。
MJExtension里面有一個(gè)mj_keyValues
Model *model = [[Model alloc] init];
model.data1 = data[@""];
model.data2 = data[@""];
//用一個(gè)可變字典做接收,轉(zhuǎn)出來(lái)的就是一個(gè)以data1和data2為鍵的字典了种远。
NSMutableDictionary *params = [model mj_keyValues];
MJExtension里面的函數(shù)是這個(gè):
#pragma mark - 模型 -> 字典
- (NSMutableDictionary *)mj_keyValues
{
return [self mj_keyValuesWithKeys:nil ignoredKeys:nil];
}
最后還有一個(gè)經(jīng)常要用到的函數(shù):mj_setupReplacedKeyFromPropertyName
這個(gè)的話太關(guān)鍵了伟葫。
項(xiàng)目中,后臺(tái)經(jīng)常會(huì)用id命名有木有院促?但是你直接取值建模呢,id是不能用來(lái)命名的會(huì)紅對(duì)吧斧抱。
所以就需要mj_setupReplacedKeyFromPropertyName
來(lái)對(duì)需要制定的鍵來(lái)做處理
在你接口調(diào)用數(shù)據(jù)的前面加上一個(gè):
[Model mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
//將你需要轉(zhuǎn)換的id寫上 對(duì)應(yīng)后臺(tái)返回的id
//當(dāng)然如果你需要轉(zhuǎn)換很多常拓,在字典里面加就行了
return @{ @"ModelId" : @"id" };
}];
主要這個(gè)函數(shù)我不太清楚是不是需要每個(gè)接口調(diào)用的時(shí)候都需要寫在前面,還是說(shuō)只要在工程里面寫一次就行了辉浦,希望后面有人能知會(huì)我一下弄抬,感激不盡。宪郊。
MJExtension里面的函數(shù)是這個(gè):
#pragma mark - key配置
+ (void)mj_setupReplacedKeyFromPropertyName:(MJReplacedKeyFromPropertyName)replacedKeyFromPropertyName
{
[self mj_setupBlockReturnValue:replacedKeyFromPropertyName key:&MJReplacedKeyFromPropertyNameKey];
[[self dictForKey:&MJCachedPropertiesKey] removeAllObjects];
}