您的位置:首页 > 移动开发 > Swift

Swift学习第十枪-AFNetwoking3.0的封装

2016-06-05 11:51 507 查看
下面是我的新建的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,params:Dictionary<String,String>){
_sessionManager.GET(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)
}

}

}


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])

}
}


代码地址:

运行的效果:

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