框架的封裝

對(duì)于第三方庫(kù)的封裝

MJExtension

AFNetworking

使用Category進(jìn)行封裝

唯一要注意的地方

JSON解析插件

ESJsonFormat

XWJsonToCode

對(duì)于第三方庫(kù)的封裝

對(duì)于第三方類庫(kù)的使用,盡量使用Category進(jìn)行封裝,讓第三方類庫(kù)只暴露一個(gè)接口給程序代碼。

以盡量減少第三方代碼對(duì)于程序的侵染性為主要原則。

這樣可以防止切換第三方框架時(shí),而導(dǎo)致的諸多不便。

MJExtension

關(guān)于解析操作,在github上有很多成熟的框架可供選擇。例如Mantle,JSONModel等。 這兩個(gè)框架出現(xiàn)的較早。

MJExtension是中國(guó)人編寫的MJExtension,是最近在國(guó)內(nèi)最流行的解析框架。

吸取了前兩款框架的優(yōu)點(diǎn)并進(jìn)行了改進(jìn), 官方文檔是中文的,同學(xué)們自己查看。

#import"MJExtension.h"

/*

1.MJ對(duì)于JSON數(shù)據(jù)的根類型是數(shù)組或者字典,有不同的解析方法

2.原則上,要盡量減少第三方框架對(duì)于源碼的侵染,應(yīng)該只留一個(gè)接口,這樣可以預(yù)防需求變更時(shí)的大批量改動(dòng)

*/

@interfaceNSObject(MJExtension)

+ (id)parse:(id)responseObj;

@end

@implementationNSObject(MJExtension)

+ (id)parse:(id)responseObj{

if([responseObj isKindOfClass:[NSArrayclass]]) {

return[selfmj_objectArrayWithKeyValuesArray:responseObj];

}

if([responseObj isKindOfClass:[NSDictionaryclass]]) {

return[selfmj_objectWithKeyValues:responseObj];

}

returnresponseObj;

}

@end

AFNetworking

Github排名第一的網(wǎng)絡(luò)請(qǐng)求框架。 多線程操作由NSOperation負(fù)責(zé), 網(wǎng)絡(luò)操作由NSURLSession負(fù)責(zé)。AFNetworking

官方文檔雖然是英文的, 但是簡(jiǎn)單易懂, 都是干貨。

使用Category進(jìn)行封裝

#import"AFNetworking.h"

#define kCompetionHandleBlock (void(^)(id model, NSError *error))completionHandle;

@interfaceNSObject(AFNetworking)

+ (id)GET:(NSString*)path parameters:(id)parameters progress:(void(^)(NSProgress*downloadProgress))downloadProgress completionHandle:(void(^)(idresponseObj,NSError*error))completionHandle;;;

+ (id)POST:(NSString*)path parameters:(id)parameters progress:(void(^)(NSProgress*downloadProgress))downloadProgress completionHandle:(void(^)(idresponseObj,NSError*error))completionHandle;

@end

#import"NSObject+AFNetworking.h"

@implementationNSObject(AFNetworking)

+ (id)GET:(NSString*)path parameters:(id)parameters progress:(void(^)(NSProgress*))downloadProgress completionHandle:(void(^)(id,NSError*))completionHandle{

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//設(shè)置允許相應(yīng)的內(nèi)容類型

#warning 如果沒寫, 可能會(huì)出現(xiàn)錯(cuò)誤打印 unacceptable contentType: ....

manager.responseSerializer.acceptableContentTypes= [NSSetsetWithArray:@[@"text/html",@"text/plain",@"text/json",@"text/javascript",@"application/json"]];

//請(qǐng)求超時(shí)時(shí)間(默認(rèn)60秒),請(qǐng)求緩存策略

manager.requestSerializer.timeoutInterval=30;

//manager.requestSerializer.cachePolicy = 0;

return[manager GET:path parameters:parameters progress:downloadProgress success:^(NSURLSessionDataTask* _Nonnull task,id_Nullable responseObject) {

completionHandle(responseObject,nil);

} failure:^(NSURLSessionDataTask* _Nullable task,NSError* _Nonnull error) {

completionHandle(nil, error);

NSLog(@"error %@", error);

}];

}

+ (id)POST:(NSString*)path parameters:(id)parameters progress:(void(^)(NSProgress*))downloadProgress completionHandle:(void(^)(id,NSError*))completionHandle{

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer.acceptableContentTypes= [NSSetsetWithArray:@[@"text/html",@"text/plain",@"text/json",@"text/javascript",@"application/json"]];

//請(qǐng)求超時(shí)時(shí)間(默認(rèn)60秒),請(qǐng)求緩存策略

manager.requestSerializer.timeoutInterval=30;

//manager.requestSerializer.cachePolicy = 0;

return[manager POST:path parameters:parameters progress:downloadProgress success:^(NSURLSessionDataTask* _Nonnull task,id_Nullable responseObject) {

completionHandle(responseObject,nil);

} failure:^(NSURLSessionDataTask* _Nullable task,NSError* _Nonnull error) {

completionHandle(nil, error);

NSLog(@"error %@", error);

}];

}

@end

唯一要注意的地方

需要對(duì)AF的接受內(nèi)容類型進(jìn)行設(shè)置,AF默認(rèn)只能支持application/json內(nèi)容模式

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithArray:@[@"text/html", @"text/plain", @"text/json", @"text/javascript", @"application/json"]];

JSON解析插件

兩款插件都是中國(guó)人寫的, 官方文檔是中文的, 自己點(diǎn)擊鏈接查看。

ESJsonFormat

ESJsonFormat

XWJsonToCode

XWJsonToCode

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容