Alamofire庫在iOS開發(fā)中的基礎(chǔ)及進(jìn)階用法大全

GET 請求

import Alamofire


Alamofire.request("https://example.com/get", method: .get)

.responseJSON { response in

switch response.result {

case .success(let JSON):

print("Success with JSON: \(JSON)")

case .failure(let error):

print("Request failed with error: \(error)")

}

}


POST 請求

Alamofire.request("https://example.com/post", method: .post, parameters: ["foo": "bar"], encoding: JSONEncoding.default)

.responseJSON { response in

// 處理響應(yīng)

}


URL編碼

let parameters: Parameters = ["q": "Alamofire"]


Alamofire.request("https://example.com/search", parameters: parameters)

// 處理響應(yīng)...


JSON編碼

let parameters: Parameters = ["foo": "bar"]


Alamofire.request("https://example.com/post", method: .post, parameters: parameters, encoding: JSONEncoding.default)

// 處理響應(yīng)...


HTTP頭部自定義

let headers: HTTPHeaders = [

"Authorization": "Bearer access_token",

"Accept": "application/json"

]


Alamofire.request("https://example.com/get", headers: headers)

// 處理響應(yīng)...


上傳文件

let fileURL = Bundle.main.url(forResource: "video", withExtension: "mp4")!


Alamofire.upload(fileURL, to: "https://example.com/upload")

.responseJSON { response in

// 處理響應(yīng)...

}


下載文件

let destination: DownloadRequest.DownloadFileDestination = { _, _ in

let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

let fileURL = documentsURL.appendingPathComponent("file.pdf")


return (fileURL, [.removePreviousFile, .createIntermediateDirectories])

}


Alamofire.download("https://example.com/file.pdf", to: destination)

.response { response in

// 檢查 response.destinationURL 確認(rèn)下載位置

// 處理響應(yīng)...

}


使用Response Handler處理響應(yīng)

Alamofire.request("https://example.com/get")

.responseJSON { response in

// 使用 JSON 數(shù)據(jù)...

}

.responseString { response in

// 使用 String 數(shù)據(jù)...

}


多部分表單上傳

Alamofire.upload(

multipartFormData: { multipartFormData in

multipartFormData.append("Hello".data(using: String.Encoding.utf8)!, withName: "greeting")

multipartFormData.append(Data("name".utf8), withName: "who")

},

to: "https://example.com/multipartForm",

encodingCompletion: { encodingResult in

switch encodingResult {

case .success(let upload, _, _):

upload.responseJSON { response in

// 處理上傳響應(yīng)...

}

case .failure(let encodingError):

print(encodingError)

}

}

)


錯誤處理

Alamofire.request("https://example.com/notfound", method: .get)

.validate()

.responseJSON { response in

switch response.result {

case .success:

// 解析JSON...

case .failure(let error):

// 錯誤處理...

print(error)

}

}


請求處理

let request = Alamofire.request("https://example.com/data")

.responseJSON { response in

// 處理響應(yīng)...

}


request.cancel() // 取消請求


監(jiān)聽網(wǎng)絡(luò)狀態(tài)

let networkReachabilityManager = NetworkReachabilityManager()


networkReachabilityManager?.startListening { status in

switch status {

case .notReachable:

print("The network is not reachable")

case .unknown :

print("It is unknown whether the network is reachable")

case .reachable(.ethernetOrWiFi):

print("The network is reachable over the WiFi or Ethernet connection")

case .reachable(.wwan):

print("The network is reachable over the WWAN (cellular) connection")

}

}


鏈?zhǔn)秸埱笈c響應(yīng)處理

Alamofire.request("https://example.com/data")

.validate(statusCode: 200..<300)

.validate(contentType: ["application/json"])

.responseData { response in

switch response.result {

case .success(let data):

// 處理 data

case .failure(let error):

// 處理 error

}

}


自定義請求適配器和重試器

class CustomRequestAdapter: RequestAdapter {

func adapt(_ urlRequest: URLRequest) throws -> URLRequest {

var urlRequest = urlRequest

// 修改請求頭部或者查詢參數(shù)等

urlRequest.setValue("mySecretToken", forHTTPHeaderField: "Authorization")

return urlRequest

}

}


let sessionManager = SessionManager()

sessionManager.adapter = CustomRequestAdapter()


sessionManager.request("https://httpbin.org/get").responseJSON { response in

// 處理響應(yīng)...

}


在請求失敗時自動進(jìn)行重試

class CustomRetrier: RequestRetrier {

func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) {

// 檢查錯誤代碼, 決定是否需要重試

if ... {

completion(true, 1.0) // 重試,延遲1秒

} else {

completion(false, 0.0) // 不重試

}

}

}


let sessionManager = SessionManager()

sessionManager.retrier = CustomRetrier()


sessionManager.request("https://httpbin.org/get").responseJSON { response in

// 處理響應(yīng)...

}


響應(yīng)序列化

以下是使用JSON 序列化器作為一個例子:

Alamofire.request("https://httpbin.org/get").responseJSON { response in

if let json = response.result.value {

print("JSON: \(json)")

}

}


SSL Pinning

let serverTrustPolicies: [String: ServerTrustPolicy] = [

"example.com": .pinPublicKeys(

publicKeys: ServerTrustPolicy.publicKeys(),

validateCertificateChain: true,

validateHost: true

)

]


let sessionManager = SessionManager(

serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)

)


sessionManager.request("https://example.com/secure").response { response in

// 處理使用SSL Pinning的響應(yīng)...

}


圖片下載和緩存

import AlamofireImage


let imageView = UIImageView()

let url = URL(string: "https://example.com/image.png")!


imageView.af_setImage(withURL: url)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容