轉載:https://www.jianshu.com/p/07b1ec36a689
最近AFNetworking的作者Matt Thompson 提出了一個新的類似AFNetworking的網絡基礎庫,並且專門使用最新的Swift語言寫的,名為 Alamofire.
一、正常導入,CocoaPods
1-1、注意下CocoaPods版本
gem install cocoapods
CocoaPods 0.39.0+ is required to build Alamofire 3.0.0+.
1-2、vim Podfile platform :ios, '8.0' use_frameworks! pod 'Alamofire' //然后 pod install 就OK了
1-3、導入Alamfire 就可以正常使用了 import Alamofire 注意目前可能會出現這個警告;Cannot load underlying module for 'Alamofire',可以先忽略它,直接 build就沒了
二、基本使用
GET請求
普通的get請求
下面是一個天氣預報的請求,時間久了,key 會失效
let parameters:Dictionary = ["key":"93c921ea8b0348af8e8e7a6a273c41bd"] Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: parameters) .responseJSON { response in print("result==\(response.result)") // 返回結果,是否成功 if let jsonValue = response.result.value { /* error_code = 0 reason = "" result = 數組套字典的城市列表 */ print("code: \(jsonValue["error_code"])") } } /* result==SUCCESS code: Optional(0) */
帶head的get請求
let headers = ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"] Alamofire.request(.GET, "http://apis.baidu.com/heweather/pro/weather?city=beijing", headers: headers) .responseJSON { response in print("result==\(response.result)") if let jsonValue = response.result.value { print("weNeedReuslt == \(jsonValue)") } }
POST 請求
先看看Alamofire 定義了許多其他的HTTP 方法(HTTP Medthods)可以使用。
public enum Method: String { case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT }
使用GET
類型請求的時候,參數會自動拼接在url
后面,使用POST
類型請求的時候,參數是放在在HTTP body
里傳遞,url
上看不到的
let parameters:Dictionary = ["key":"93c921ea8b0348af8e8e7a6a273c41bd"] Alamofire.request(.POST, "http://apis.haoservice.com/weather/city", parameters: parameters) .responseJSON { response in print("result==\(response.result)") // 返回結果,是否成功 if let jsonValue = response.result.value { /* error_code = 0 reason = "" result = 數組套字典的城市列表 */ print("code: \(jsonValue)") } }
至於加header的post 請求,實際上也是GET 一樣的
注意點1: 參數編碼方式
除了默認的方式外,Alamofire還支持URL、URLEncodedInURL、JSON、Property List以及自定義格式方式編碼參數。
public enum ParameterEncoding { case URL case URLEncodedInURL case JSON case PropertyList(NSPropertyListFormat, NSPropertyListWriteOptions) case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?)) }
//想要把一個字典類型的數據,使用json格式發起POST請求
let parameters = [ "one": [1,2,3], "two": ["apple": "pig"] ] Alamofire.request(.POST, "http://www.example.com/service", parameters: parameters, encoding: .JSON)
注意點2:validate()
將其與請求和響應鏈接,以確認響應的狀態碼在默認可接受的范圍(200到299)內。如果認證失敗,響應處理方法將出現一個相關錯誤,我們可以根據不同在完成處理方法中處理這個錯誤。比如下面的樣例,成功時會打印成功信息,失敗時輸出具體錯誤信息。
Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"]) .validate() .responseJSON { response in switch response.result { case .Success: print("數據獲取成功!") case .Failure(let error): print(error) } }
注意點3:響應處理方法
觀察上面幾個請求,我都是使用樣例的responseJSON(處理json類型的返回結果)外,Alamofire還提供了許多其他類型的響應處理方法:
response()
responseData()
responseString(encoding: NSStringEncoding) responseJSON(options: NSJSONReadingOptions) responsePropertyList(options: NSPropertyListReadOptions)
我們可以根據我的實際情況,選擇自己需要的。
例如 responseData()
Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"]) .responseData { response in print(response.request) print(response.response) print(response.result) }
暫時基本使用,總結到此,持續更新中····⛽️
備注參考
https://github.com/Alamofire/Alamofire
http://www.hangge.com/blog/cache/detail_970.html
http://www.cnblogs.com/iCocos/p/4550570.html