Swift学习第十枪-AFNetwoking3.0的封装
来源:互联网 发布:软件工程硕士 单证 编辑:程序博客网 时间:2024/04/30 00:40
下面是我的新建的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' dopod '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 Foundationimport SwiftyJSONclass 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]) } }
代码地址:
运行的效果:
1 0
- Swift学习第十枪-AFNetwoking3.0的封装
- gcd的封装(swift)
- swift 通知的封装
- AFNetworking 的封装 Swift
- swift简单学习之封装
- 二维码的简单封装(swift)
- Swift基础框架的封装
- 【0】 Swift 从零单排:学习 Swift 的前言
- ActiveSQLite更简单的Swift数据库方案(SQLite.swift封装)
- swift封装的跑马灯效果
- swift中对AFNetWorking的简单封装
- Swift - 自定义tabbar的封装
- swift-自己封装的一个网络工具
- OC和Swift的AFN网络封装
- Swift版的网络请求封装
- 简易的Toast封装(Swift版本)
- swift 面向协议的网络请求封装
- 学习的第十天
- 【转】基于display:table的CSS布局
- Vmware 虚拟机克隆后网卡地址的修改
- ASM javassist
- makefile文件的编写
- InputStream 读取文件并输出内容
- Swift学习第十枪-AFNetwoking3.0的封装
- 买房笔记录
- 【JavaScript】——面向对象之原型优化
- Android_Activity(三)
- C#设计模式极简单实现(1)单件模式
- Java中的序列化Serialable高级详解
- Core Data
- Android面试题及其答案(二)
- No default constructor for entity问题分析与解决