當然AFNetworking在Swift中還是可以用的,但是我不推薦。
安裝Alamofire
可以用Cocoapods安裝,podfile的配置如下:
平臺:ios,“8.0”
use_frameworks!
目標“您的項目名稱”是什麽
pod 'Alamofire ',' ~ & gt3.3.0'
結束
然後轉到終端並執行pod安裝。使用前,導入Alamofire。
基本使用,請求數據
壹般數據請求
//我將請求放在按鈕點擊事件中。
@ I action func onbtn click(sender:ui button){
//這裏我以壹個界面查詢手機號碼歸屬地為例。
Alamofire.request(。GET,,requestURL,參數:["phone":phoneNumber],編碼:。URL,頭:["apix-key":apiKey])。responseJSON { (response) in
//請求是否成功?
//if response . result . is success { }
if let JSON value = response . result . value {
打印(jsonValue)
}
}
}
Alamofire.request(方法,URLString,參數,編碼,頭)
//這是壹個完整的Alamofire初始化方法。請求,其中:
//方法,請求方法,比如:。去拿。貼吧。刪除等。
//URLString,請求接口
//參數、請求參數和字典類型。如果GET方法請求數據,傳入的參數將被轉換為key 1 = value 1 &;key2=value2的形式。
//encoding,編碼模式,Alamofire提供枚舉來表示請求中使用的編碼,比如。URL,。JSON,那麽GET請求數據壹般用。URL編碼模式。
//headers,請求頭,對應NSURLRequest中的屬性allHTTPHeaderFields。
這裏是壹個普通的GET請求,傳入的參數Alamofire自動改為key = value &;Kay2 =值2。如果請求是POST或者請求參數需要以JSON的形式傳輸,那麽可以將編碼參數傳入。JSON。
我們在responseJSON閉包中得到的參數是壹個結構,它包含請求對象、返回數據、請求結果等等。
響應結果控制
阿拉莫菲爾。Request()返回壹個請求對象;請求對象的參數是附加到此請求的所有參數;responseJSON是返回結果的控件;並且Alamofire還提供了返回結果為JSON數據時處理其他返回結果的方法:
響應()
ResponseData()//二進制數據
響應字符串(編碼:nsstringcoding)//字符串結果
響應JSON(選項:nsjsonReadingOptions)//JSON數據
response property list(options:nsproperty list read options)//屬性列表
///響應模式應該取決於服務器返回的結果。如果服務器給妳JSON數據,用responseJSON,如果是其他數據,用對應的。
使用validate()驗證請求是否成功。
Alamofire.request(。GET,requestURL,參數:["phone":phoneNumber],編碼:。URL,頭:["apix-key":apiKey])。驗證()。responseJSON { (response) in
//請求是否成功?
開關響應.結果{
凱斯。成功:
打印(“數據請求成功”)
凱斯。失敗(let錯誤):
打印(錯誤)
}
}
Validate()將確認響應的狀態代碼控制在可接受的範圍200-299內。如果驗證失敗,響應處理方法中將出現錯誤。
上傳數據
簡單上傳文件的小栗子。
let fileURL = NSBundle.mainBundle()。URLForResource("1 ",擴展名為:" jpg ")
Alamofire.upload(。POST,uploadURL,file: fileURL!)
//這裏前兩個參數分別是連接方式和請求接口,第三個參數是要上傳的文件的本地URL。
當然也可以以NSData的形式上傳:
Alamofire.upload(。POST,uploadURL,data:“上傳數據”。dataUsingEncoding(nsu TF 8 string encoding)!)
還有的用MultipartFormData等等,這裏就不介紹了。
上傳附件時監控進度。
Alamofire.upload(。POST,uploadURL,data:“上傳數據”。dataUsingEncoding(nsu TF 8 string encoding)!).進度{(已寫,總已寫,總需要寫)在
print("已寫字節數\(已寫)總已寫字節數\(總已寫字節數)總字節數\(總所需寫字節數)")
///每次上傳壹部分數據都會回調這個閉包。
}
同樣的,無論是上傳還是請求數據還是下載文件,我們都可以從服務器得到響應,所以response series方法也可以用於上傳:
Alamofire.upload(。POST,uploadURL,data:“上傳數據測試”。dataUsingEncoding(nsu TF 8 string encoding)!).進度{(已寫,總已寫,總需要寫)在
print("已寫字節數\(已寫)總已寫字節數\(總已寫字節數)總字節數\(總所需寫字節數)")
}.responseJSON { (response) in
Print(response)//服務器對此數據上傳的響應。
}
有上傳也有下載。Alamofire提供Alamofire.download()方法來執行下載操作:
///本例下載的文件是網上隨便找的壹張圖片。
Alamofire.download(。GET,"/attch/day _ 160218/20160218 _ d 968438 a 2434 b 62 ba 59 DH 7 q 5 kets 6 oh . png "){(URL,response)-& gt;進來吧
var path = NSSearchPathForDirectoriesInDomains(。文檔目錄,。UserDomainMask,true)[0]
path+= "/\(response . suggested filename!)"
返回NSURL.fileURLWithPath(路徑)
}
download方法接受壹個閉包,它在文件下載後被調用。我們需要在閉包中下載完文件後返回資源路徑來保存文件,或者妳可以單獨拆分壹個函數,傳入函數名。
如果我們認為在閉包中包含代碼很麻煩或者沒有必要,我們可以使用默認的資源路徑:
///這裏用的是系統的文檔路徑。
讓destina = Alamofire。request . suggested download destination(目錄:。文檔目錄,域:。用戶域掩碼)
Alamofire.download(。GET,"/attch/day _ 160218/20160218 _ d 968438 a 2434 b 62 ba 59 DH 7 q 5 kets 6 oh . png ",目的地:destina)
同樣,下載文件也可以查看下載進度。
//檢測下載進度的邏輯在這裏實現。
}
如果需要通過斷點續傳下載文件,這樣做相對簡單。首先,Alamofire提供了相應的下載方法:
alamo fire . download(resume data:ns data(),目的地:destina)
第壹個參數應該傳入下載的數據,以便可以在下載數據的基礎上繼續下載。那麽我們需要做的就是在下載出現錯誤或者暫停的時候保存下載的數據。這是壹般的實現思路,這裏就不演示了。