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

来源:互联网 发布:python编写购物车程序 编辑:程序博客网 时间:2024/05/16 14:57

对于网络请求类AFNetworking,在Swift中应该怎样使用和封装一个业务类呢?

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

其实两个框架本质一样,均出自一个作者,安装可到 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 UIKitimport AFNetworkingenum 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 UIKitimport Alamofireenum 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)}



1 0
原创粉丝点击