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

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51588829 下面是我的新建的Swift学习交流群,欢迎大家一起来共同学习Swift。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51588829

下面是我的新建的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])

    } 
}

代码地址:
运行的效果:

这里写图片描述

相关文章
|
6月前
|
人工智能 物联网 API
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
|
Swift
Swift - 自定义tabbar的封装
Swift - 自定义tabbar的封装
337 0
Swift - 自定义tabbar的封装
|
Swift
swift微博第7天(导航条按钮的封装)
swift微博第7天(导航条按钮的封装)
139 0
swift微博第7天(导航条按钮的封装)
|
Swift
(一)swift的基本学习
(一)swift的基本学习
175 0
|
开发工具 Swift iOS开发
Swift学习第二练——Swift项目时光电影
Swift学习第二练——Swift项目时光电影
160 0
Swift学习第二练——Swift项目时光电影
|
Swift 开发者 iOS开发
Swift学习第一练——用Swift实现的FlappyBird小游戏
Swift学习第一练——用Swift实现的FlappyBird小游戏
191 0
Swift学习第一练——用Swift实现的FlappyBird小游戏
|
数据库 iOS开发 数据库管理
Swift学习第十二枪----移动数据库王者Realm入门教程
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51636392 今天给大家带来的是堪称是一个可以替代SQLite,Core Data 的以及ORMlibraries的轻量级数据库—Realm移动端数据库。
952 0
|
JSON 前端开发 数据格式
Swift学习第十一枪-基于协议的MVVM模式的实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51592303 下面是我的新建的Swift学习交流群,欢迎大家一起来共同学习Swift。
885 0
|
SQL 数据库 数据库管理
Swift学习第九枪之SQLite的使用
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51570242 前面写了一部分关于Swift的语法学习,今天要学习的是关于IOS中数据存储的一种存储方式之SQLite的使用。
871 0
|
存储 算法 Swift
Swift学习第七枪--协议(一)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51553279 协议(Protocols) 协议 定义了一个蓝图,规定了用来实现某一特定工作或者功能所必需的方法和属性。
668 0