
為什么要封裝.png
一.封裝的好處
- 可以降低網(wǎng)絡(luò)請(qǐng)求方法與
Controller(控制器)的耦合度,即使網(wǎng)絡(luò)使用的第三方框架發(fā)生不兼容、錯(cuò)誤等問(wèn)題從而想換框架時(shí),也不用到每個(gè)控制器里面改代碼(50、60頁(yè)面會(huì)改到想哭). - 建立單例工具類,方便管理
- 優(yōu)化代碼結(jié)構(gòu)
二.網(wǎng)絡(luò)請(qǐng)求工具類(OC)
1.導(dǎo)入框架和創(chuàng)建類
1).先導(dǎo)入第三方庫(kù)AFNetworking
2).建立NetworkTool類繼承于AFHTTPSessionManager,繼承于AFHTTPSessionManager的原因是發(fā)送請(qǐng)求需要調(diào)用到manager,而直接繼承于AFHTTPSessionManager可以直接調(diào)用內(nèi)部的方法
2.添加網(wǎng)絡(luò)請(qǐng)求方法和實(shí)現(xiàn)
1).方法聲明
- 首先確定要傳入的參數(shù),有網(wǎng)址、請(qǐng)求參數(shù)、GET/POST方法,當(dāng)網(wǎng)絡(luò)請(qǐng)求成功后,會(huì)有
responseObject回調(diào),所以還需要傳入一個(gè)block
/**
創(chuàng)建網(wǎng)絡(luò)請(qǐng)求工具類的單例
*/
+ (instancetype)sharedTool;
/**
創(chuàng)建請(qǐng)求方法
*/
- (void)requestWithURLString: (NSString *)URLString
parameters: (NSDictionary *)parameters
method: (NSString *)method
callBack: (void(^)(id responseObject))callBack;
2).方法實(shí)現(xiàn)
單例
+ (instancetype)sharedTool {
static id instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] initWithBaseURL:nil];
});
return instance;
}
網(wǎng)絡(luò)請(qǐng)求方法
- (void)requestWithURLString: (NSString *)URLString
parameters: (NSDictionary *)parameters
method: (NSString *)method
callBack: (void (^)(id))callBack {
//判斷請(qǐng)求方法是GET還是POST
if ([method isEqualToString:@"GET"]) {
//調(diào)用AFN框架的方法
[self GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//如果請(qǐng)求成功,則回調(diào)responseObject
callBack(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//如果請(qǐng)求失敗,控制臺(tái)打印錯(cuò)誤信息
NSLog(@"%@",error);
}];
}
if ([method isEqualToString:@"POST"]) {
[self POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
callBack(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}
}
三.網(wǎng)絡(luò)請(qǐng)求工具類(Swift)
1.新建SwiftNetworkTool.swift文件,SwiftNetworkTool類繼承于AFHTTPSessionManager

網(wǎng)絡(luò)請(qǐng)求工具類(Swift).png
2.Swift版簡(jiǎn)潔好用,直接上代碼
//單例
static let shared = SwiftNetworkTool()
//網(wǎng)絡(luò)中間層的接口方法
func request(urlString: String, parameters: [String: Any]? = nil, method: String, callBack: @escaping (_ responseObject: Any?) -> ()) {
//網(wǎng)絡(luò)請(qǐng)求成功的閉包
let succes = {
(task: URLSessionDataTask, response: Any?) in
callBack(response)
}
//網(wǎng)絡(luò)請(qǐng)求失敗的閉包
let failure = {
(task: URLSessionDataTask?, error: Error) in
print("\(error)")
callBack(nil)
}
if method == "GET" {
self.get(urlString, parameters: parameters, progress: nil, success: succes, failure: failure)
}
if method == "POST" {
self.post(urlString, parameters: parameters, progress: nil, success: succes, failure: failure)
}
}
總結(jié):鑒于公司請(qǐng)求的東西很多,所以只封了這些方法,以后遇到別的可以繼續(xù)加。
網(wǎng)絡(luò)請(qǐng)求工具類源碼地址