您的位置:首页 > 理论基础 > 计算机网络

Swift 2.3 【封装网络请求业务类 AFNetworking/ Alamofire】

2016-02-01 15:14 531 查看
对于网络请求类AFNetworking,在Swift中应该怎样使用和封装一个业务类呢?

上期我们讲到如何在OC中封装一个网络请求的业务类,今天提供一下Swift发送网络请求的业务类写法。提供
AFNetworking 和 Alamofire 两种框架网络请求。

其实两个框架本质一样,均出自一个作者,安装可到 github 去下载或者使用 CocoaPods 集成。个人推荐使用 AFNetworking,因为 Alamofire 提示不太好,很多函数如果不知道名称就不知道如何调用。

读者可以结合OC的网络请求业务类封装去理解本文,传送门:

iOS 【network-封装业务类AFNetworking(AFHTTPSessionManager)】

代码描述:

一、AFNetworking

① 封装业务类

//
//  WZYHTTPTools.swift
//  PhotoBrowser
//
//  Created by 王中尧 on 16/8/15.
//  Copyright © 2016年 wzy. All rights reserved.
//

import UIKit

import AFNetworking

enum WZYRequestMethod {
case GET
case POST
}

class WZYHTTPTools: AFHTTPSessionManager {

static let shareSessionManager: WZYHTTPTools = {
let tools = WZYHTTPTools()

// 往Set里面插入数据的特有方式
tools.responseSerializer.acceptableContentTypes?.insert("text/html")

return tools
}()

}

extension WZYHTTPTools {

// 请求数据操作(GET/ POST)
func request(method: WZYRequestMethod, urlString: String, parameters: [String: AnyObject], progress: (progressResult: NSProgress?) -> (), success: (successResult: AnyObject?)  -> (), error: (errorResult: NSError?) -> ()) {

// 进度回调闭包
let progressCallback = { (progressData: NSProgress) in
progress(progressResult: progressData)
}

// 成功结果回调闭包
let successCallback = { (task: NSURLSessionDataTask, successData: AnyObject?) in
success(successResult: successData)
}

// 失败错误信息回调闭包
let failureCallback = { (task: NSURLSessionDataTask?, errorData: NSError) in
error(errorResult: errorData)
}

if method == .GET {
GET(urlString, parameters: parameters, progress: progressCallback, success: successCallback, failure: failureCallback)

} else {
POST(urlString, parameters: parameters, progress: progressCallback, success: successCallback, failure: failureCallback)
}
}

}


② 如何使用(只写了调用代码)
let dict = ["wzy": "laolao"]

WZYHTTPTools.shareSessionManager.request(.GET, urlString: "http://120.25.226.186:32812/login?username=xxx&pwd=xxx", parameters: dict, progress: { (progressResult) in
print((progressResult?.completedUnitCount)! / (progressResult?.totalUnitCount)!)

}, success: { (successResult) in
print(successResult)
}) { (errorResult) in
print(errorResult)
}


二、Alamofire

① 封装业务类

//
//  WZYHTTPTool.swift
//  WZYBaisiSwift
//
//  Created by 王中尧 on 16/8/14.
//  Copyright © 2016年 wzy. All rights reserved.
//

import UIKit

import Alamofire

enum WZYHTTPToolMethod: String {
case GET = "GET"
case POST = "POST"
}

class WZYHTTPTool: NSObject {

}

extension WZYHTTPTool {

class func request(method: WZYHTTPToolMethod, urlStr: String, params: [String: AnyObject]? = nil, finished:(successData: AnyObject?, error: NSError?) -> ()) {

if method == .GET { // GET 请求

Alamofire.request(.GET, urlStr, parameters: params).responseJSON(completionHandler: { response in

if response.result.isSuccess {
finished(successData: response.result.value, error: nil)
} else {
finished(successData: nil, error: response.result.error!)
}

})

} else { // POST 请求

Alamofire.request(.POST, urlStr, parameters: params).responseJSON(completionHandler: { response in

if response.result.isSuccess {
finished(successData: response.result.value, error: nil)
} else {
finished(successData: nil, error: response.result.error!)
}

})

}

}

}


② 如何使用
let dict = ["laolao": "wzy"]

WZYHTTPTool.request(.GET, urlStr: "http://120.25.226.186:32812/login?username=xxx&pwd=xxx", params: dict) { (successData, error) in
guard error == nil else {
print(error)
return
}

print(successData)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息