下面是我的新建的Swift学习交流群,欢迎大家一起来共同学习Swift。
前面写了一部分关于Swift的语法学习,今天要学习的是Swift关于iOS中网络请求的AFNetwoking3.0的封装。
Swift关于iOS中网络请求的AFNetwoking3.0的封装的流程有如下的几个步骤:
- 使用cocoaPods 下载AFNetwoking的库
- 建立桥接文件
- 封装AFNetwokingUtil工具类
- 使用协议进行传值
- 案例的实现
1.使用cocoaPods 下载AFNetwoking的库
platform :ios,'8.0'
use_frameworks!
target 'HelloSwfit' do
pod 'AFNetworking','~> 3.0'
pod 'SwiftyJSON','~> 2.3'
pod 'Toast-Swift','~> 1.3.0'
end
接着在终端命令执行:pod update –verbose –no-repo-update
这样下载成功了。
2.建立桥接文件
1.1在用Swift使用OC中得类文件的时候,需要进行桥接,首先建一个.h的头文件。
注意:桥接文件的命名规则:项目名-Bridging-Header.Swift
#import "AFNetworking/AFNetworking.h"
1.2 在Build-settings -> Swift Complier - Code Generaton —>Objective C Briding Herder中添加自己的桥接文件。
如下图:
这样的话,桥接文件已经OK。
3.封装AFNetwokingUtil工具类
//
// AFNetWorkingUtil.swift
// HelloSwfit
//
// Created by lidong on 16/5/17.
// Copyright © 2016年 lidong. All rights reserved.
//
import UIKit
/// 对AFNetworking的封装
class AFNetWorkingUtil {
/// 基础URL
let BASE_URL = "http://v.juhe.cn"
/// AFHTTPSessionManager
let _sessionManager = AFHTTPSessionManager()
/// 定义一个响应结果的传递代理
var delegate: ResponseResultDelegate?
// 单例 全局的的网络工具
class var sharedInstance: AFNetWorkingUtil
{
struct Static {
static var onceToken : dispatch_once_t = 0
static var instance : AFNetWorkingUtil? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = AFNetWorkingUtil()
}
return Static.instance!
}
/** 获取baseUrl - parameter baseUrl: 基础的url - returns: URL */
func getBaseUrl(baseUrl:String) ->String{
return BASE_URL
}
/** post请求 - parameter action: 请求的action - parameter params: 请求参数 */
func post(action:String,params:Dictionary<String,String>){
_sessionManager.POST(getBaseUrl(BASE_URL)+action,parameters: params,success: { (operation:NSURLSessionDataTask?,responSEObj:AnyObject?) in
print(responSEObj)
self.delegate?.responseSuccess(responSEObj)
}) { (operation:NSURLSessionDataTask?,error:NSError) in
print(error)
self.delegate?.responseError(error)
}
}
/** get请求 - parameter action: 请求的action - parameter params: 请求参数 */
func get(action:String,String>){
_sessionManager.GET(getBaseUrl(BASE_URL)+action,responSEObj:AnyObject?) in
print(responSEObj)
self.delegate?.responseSuccess(responSEObj)
}) { (operation:NSURLSessionDataTask?,error:NSError) in
print(error)
self.delegate?.responseError(error)
}
}
}
4.使用协议进行传值
//
// ResponseResult.swift
// HelloSwfit
//
// Created by lidong on 16/6/5.
// Copyright © 2016年 lidong. All rights reserved.
//
/** * 网络请求响应结果的回调 */
protocol ResponseResultDelegate {
/** 响应成功的回调 - parameter response: 成功的信息 */
func responseSuccess(responSEObj:AnyObject?)
/** 响应失败的回调 - parameter responseError: 失败的信息 */
func responseError(responSEObj:AnyObject?)
}
5.案例的实现
//
// NetWokingGetDemo.swift
// HelloSwfit
//
// Created by lidong on 16/6/5.
// Copyright © 2016年 lidong. All rights reserved.
//
import Foundation
import SwiftyJSON
class NetWokingGetDemo: UITableViewController,ResponseResultDelegate {
let aFUtils = AFNetWorkingUtil.sharedInstance
var items:Array = [String]()
override func viewDidLoad() {
super.viewDidLoad()
aFUtils.delegate = self
let action:String = "/dream/category"
let dic = ["key":"c73b082b0c150b3bcba2cea1b96a8922"]
aFUtils.get(action,params: dic)
self.tableView.delegate = self
self.tableView.dataSource = self
self.title = "周公解梦"
}
func responseError(responSEObj: AnyObject?) {
Util.log("responseSuccess",message: "服务器异常!")
}
func responseSuccess(responSEObj: AnyObject?) {
let json = JSON(responSEObj!)
Util.log("responseSuccess",message: json["error_code"].intValue)
Util.log("responseSuccess",message: json["reason"].string!)
Util.log("responseSuccess",message: json["result"].array!.count)
let d = json["result"].array!.count
if d > 0 {
let list: Array<JSON> = json["result"].array!
for item in list {
items.append(item["name"].string!)
}
self.tableView.reloadData()
}
}
override func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = UITableViewCell()
cell.textLabel?.text = items[indexPath.row]
return cell;
}
override func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath) {
Util.showToast(self,message: items[indexPath.row])
}
}