Alamofire 的使用与简单封装

  • 在写了几个 Swift 的 Demo 后,我就深深的迷上了这门语言。它相比 OC 而言,简洁的真的不止一点,很多地方同 JS 一样简便,语法与 ES6 的写法也有些相似。如果你熟悉 OC,并且会写 JS,那么你可以很快的上手 Swift。
  • 因为 Swift 的简洁、高效率,苹果公司也在大力推崇 Swift,而且 Swift 在语言排行榜上也已经超过了 OC。相信不久以后,Swift 将逐步甚至完全的取代 OC。

闲话少叙,将自己使用 Alamofire 的过程分享给大家

一、Alamofire 简介

如果你是 iOS 发开者,相信你一定用过 AFNetworking。AFN 的作者用 Swift 又写了一套网络请求的框架,名为 Alamofire

二、Alamofire 使用

1. 特别说明

如果你的 cocoapods 版本过低,是无法导入最新版本 Alamofire 的,而这又会导致你升级 Swift 3.0 时一片红色警告。楼主周末导入时,因为 cocoapods 版本是 1.1.0,只能导入 Alamofire 3.4.0 版本,而 Alamofire 3.4.0 版本最高只能匹配到 Swift 2.3。可是当时的我并不知道,随手点了个匹配 Swift 3.0,结果 Bomb 瞬间爆炸。

传送门:CocoaPods 的安装与使用

2.导入

cd 至你的项目目录下 pod init,可以直接通过 Xcode 打开,也可以直接在终端内编辑

platform :ios, '9.0'
use_frameworks!

target 'XXX' do

pod 'Alamofire'

end

pod install 会更新你的本地 pod 目录,有时会卡住很久,用下面的命令可跳过这一步

pod install --no-repo-update

PS:我现在 cocoapods 1.2.0,导入的 Alamofire 为 4.0.1 版本,可以匹配 Swift 3.0

3. 使用

一个可用于测试网络请求的网站:httpbin.org

不要忘了这一句

import Alamofire
GET 请求
Alamofire.request("http://httpbin.org/get").responseJSON { (response) in
    guard let result =  response.result.value else {
        print(response.result.error!)
        return
    }
    
    print(result)
}

POST 请求
Alamofire.request("http://httpbin.org/post", method: .post, parameters: ["name": "JackieQu"]).responseJSON { (response) in
    guard let result =  response.result.value else {
        print(response.result.error!)
        return
    }
    
    print(result)
}

PS:?可选类型、!强制解析、guard 等为 Swift 的语法,请自行学习

三、Alamofire 简单封装

创建名为 NetworkTools 的类,如果没有用到 NSObject 的相关属性,也可以不用继承 NSObject,这可以使工具类更加轻量级

import UIKit
import Alamofire

enum MethodType {
    case get
    case post
}

class NetworkTools {
    class func requestData(_ type : MethodType, URLString : String, parameters : [String : Any]? = nil, finishedCallback :  @escaping (_ result : Any) -> ()) {
        
        // 1.获取类型
        let method = type == .get ? HTTPMethod.get : HTTPMethod.post
        
        // 2.发送网络请求
        Alamofire.request(URLString, method: method, parameters: parameters).responseJSON { (response) in
            
            // 3.获取结果
            guard let result = response.result.value else {
                print(response.result.error!)
                return
            }
            
            // 4.将结果回调出去
            finishedCallback(result)
        }
    }
}

使用

NetworkTools.requestData(.get, URLString: "http://httpbin.org/get") { (result) in
    print(result)
}

NetworkTools.requestData(.post, URLString: "http://httpbin.org/post", parameters: ["name": "JackieQu"]) { (result) in
    print(result)
}

对于这种经常使用,而且项目里多个页面都涉及到的框架,最好都要进行封装,使得程序不过于依赖该框架,易于修改。否则,一旦该框架更新了大量方法,你的工作量会 Bomb 瞬间爆炸。

你可能感兴趣的:(Alamofire 的使用与简单封装)