iosiOS开发技能Swift

Alamofire 的使用与简单封装

2017-02-15  本文已影响5169人  哎呀我Qu

闲话少叙,将自己使用 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 瞬间爆炸。

上一篇 下一篇

猜你喜欢

热点阅读