Swift学习第十枪-AFNetwoking3.0的封装
2016-06-05 11:51
507 查看
下面是我的新建的Swift学习交流群,欢迎大家一起来共同学习Swift。
![](https://img-blog.csdn.net/20160603213258019)
前面写了一部分关于Swift的语法学习,今天要学习的是Swift关于iOS中网络请求的AFNetwoking3.0的封装。
Swift关于iOS中网络请求的AFNetwoking3.0的封装的流程有如下的几个步骤:
使用cocoaPods 下载AFNetwoking的库
建立桥接文件
封装AFNetwokingUtil工具类
使用协议进行传值
案例的实现
接着在终端命令执行:pod update –verbose –no-repo-update
这样下载成功了。
注意:桥接文件的命名规则:项目名-Bridging-Header.Swift
1.2 在Build-settings -> Swift Complier - Code Generaton —>Objective C Briding Herder中添加自己的桥接文件。
如下图:
![](https://img-blog.csdn.net/20160602210130783)
这样的话,桥接文件已经OK。
代码地址:
运行的效果:
前面写了一部分关于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]) } }
代码地址:
运行的效果:
相关文章推荐
- Swift基础(六):属性、方法、下标脚本
- Swift 中使用 SQLite——新增数据
- Swift 中使用 SQLite——修改和删除数据
- Swift 中使用 SQLite——查询数据
- Swift 中使用 SQLite——批量更新(事务处理)
- Swift 中使用 SQLite——打开数据库
- 记OC迁移至swift中笔记20tips
- Swift专题讲解二十三——高级运算符
- 【swift学习笔记】四.swift使用Alamofire和swiftyJson
- 【swift学习笔记】四.swift使用Alamofire和swiftyJson
- Swift基础(五):类和结构体
- 听说Swift很NB,那么来勉强学点(3.3)--集合类型字典Dictionary
- swift学习之路(十)字典
- swift学习之路(九)数组
- iOS开发之swift与OC混编出现的坑,oc中不能对swift的代理进行调用,不能访问swift中的代理,swift中的回调方法
- NSUserDefaults.standardUserDefaults().boolForKey
- OC与swift相互调用
- iOS 的用户认证:使用Swift和Ruby on Rail
- 今天开始学习swift
- Swift开篇012->构造过程