最近AFNetworking的作者M(jìn)att Thompson 提出了一個新的類似AFNetworking的網(wǎng)絡(luò)基礎(chǔ)庫归形,并且專門使用最新的Swift語言寫的,名為 Alamofire.
一、正常導(dǎo)入,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、導(dǎo)入Alamfire 就可以正常使用了
import Alamofire
注意目前可能會出現(xiàn)這個警告;Cannot load underlying module for 'Alamofire'锤悄,可以先忽略它,直接 build就沒了
二嘉抒、基本使用
GET請求
普通的get請求
下面是一個天氣預(yù)報的請求零聚,時間久了,key 會失效
let parameters:Dictionary = ["key":"93c921ea8b0348af8e8e7a6a273c41bd"]
Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: parameters)
.responseJSON { response in
print("result==\(response.result)") // 返回結(jié)果些侍,是否成功
if let jsonValue = response.result.value {
/*
error_code = 0
reason = ""
result = 數(shù)組套字典的城市列表
*/
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
類型請求的時候,參數(shù)會自動拼接在url
后面娩梨,使用POST
類型請求的時候,參數(shù)是放在在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)") // 返回結(jié)果狈定,是否成功
if let jsonValue = response.result.value {
/*
error_code = 0
reason = ""
result = 數(shù)組套字典的城市列表
*/
print("code: \(jsonValue)")
}
}
至于加header的post 請求,實際上也是GET 一樣的
注意點1: 參數(shù)編碼方式
除了默認(rèn)的方式外习蓬,Alamofire還支持URL纽什、URLEncodedInURL、JSON躲叼、Property List以及自定義格式方式編碼參數(shù)芦缰。
public enum ParameterEncoding {
case URL
case URLEncodedInURL
case JSON
case PropertyList(NSPropertyListFormat, NSPropertyListWriteOptions)
case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?))
}
//想要把一個字典類型的數(shù)據(jù),使用json格式發(fā)起POST請求
let parameters = [
"one": [1,2,3],
"two": ["apple": "pig"]
]
Alamofire.request(.POST, "http://www.example.com/service", parameters: parameters, encoding: .JSON)
注意點2:validate()
將其與請求和響應(yīng)鏈接枫慷,以確認(rèn)響應(yīng)的狀態(tài)碼在默認(rèn)可接受的范圍(200到299)內(nèi)让蕾。如果認(rèn)證失敗,響應(yīng)處理方法將出現(xiàn)一個相關(guān)錯誤或听,我們可以根據(jù)不同在完成處理方法中處理這個錯誤探孝。比如下面的樣例,成功時會打印成功信息誉裆,失敗時輸出具體錯誤信息顿颅。
Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"])
.validate()
.responseJSON { response in
switch response.result {
case .Success:
print("數(shù)據(jù)獲取成功!")
case .Failure(let error):
print(error)
}
}
注意點3:響應(yīng)處理方法
觀察上面幾個請求,我都是使用樣例的responseJSON(處理json類型的返回結(jié)果)外足丢,Alamofire還提供了許多其他類型的響應(yīng)處理方法:
response()
responseData()
responseString(encoding: NSStringEncoding)
responseJSON(options: NSJSONReadingOptions)
responsePropertyList(options: NSPropertyListReadOptions)
我們可以根據(jù)我的實際情況粱腻,選擇自己需要的。
例如 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)
}
暫時基本使用斩跌,總結(jié)到此绍些,持續(xù)更新中····??
備注參考
https://github.com/Alamofire/Alamofire
http://www.hangge.com/blog/cache/detail_970.html
http://www.cnblogs.com/iCocos/p/4550570.html