最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift網(wǎng)絡請求庫Alamofire使用詳解

 更新時間:2017年08月29日 09:36:18   作者:lv灬陳強  
這篇文章主要為大家詳細介紹了Swift網(wǎng)絡請求庫Alamofire的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

Alamofire是一個使用Swift開發(fā)的網(wǎng)絡請求庫,其開發(fā)團隊是AFNetworking的原團隊。它語法簡潔,采用鏈式編程的思想,使用起來是相當?shù)氖娣?。本質(zhì)是基于NSURLSession進行封裝。接下開我們就進入實戰(zhàn),開始學習Alamofire的使用。

GET請求

常用的get請求示例以及請求結果

 Alamofire.request("https://httpbin.org/get", method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
  if(response.error == nil){
  LLog("請求成功")
  LLog(response.result.value)
  }else{
  LLog("請求失敗\(String(describing: response.error))")
  }

 }

這里寫圖片描述

Get請求、有參數(shù)、使用Basic Auth授權訪問(例如:jira)

var header:HTTPHeaders = [:]
 if let authorizationHeader = Request.authorizationHeader(user: "xxxx", password: "xxxxxx") {
  header[authorizationHeader.key] = authorizationHeader.value
 }
 // 此處的 URLEncoding.default (URLEncoding.queryString )會將parameters 拼接到url后面
 Alamofire.request("https://httpbin.org/get", method: HTTPMethod.get, parameters: ["key":"value"], encoding: URLEncoding.default, headers: header).responseJSON { (response) in
  if(response.error == nil){
  LLog("請求成功")
  LLog(response.result.value)
  }else{
  LLog("請求失敗\(String(describing: response.error))")
  }

 }

請求返回的結果

POST請求 常用的post請求

Alamofire.request("https://httpbin.org/post", method: .post, parameters: ["key1":"value1","key2":"value2"], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in

   if(response.error == nil){
    LLog("請求成功")
    LLog(response.result.value)
   }else{
    LLog("請求失敗\(String(describing: response.error))")
   }

  }

請求返回的結果

post請求,提交json格式的數(shù)據(jù)

// JSONEncoding.default === JSONEncoding.prettyPrinted
 Alamofire.request("https://httpbin.org/post", method: .post, parameters: ["key1":"value1","key2":"value2"], encoding: JSONEncoding.default, headers: nil).responseJSON { (response) in

   if(response.error == nil){
    LLog("請求成功")
    LLog(response.result.value)
   }else{
    LLog("請求失敗\(String(describing: response.error))")
   }

  }

請求返回的結果

PUT、Delete 請求 參照POST(使用區(qū)別不大)

UPLOAD(上傳文件)

上傳文件示例

 let data:Data = UIImageJPEGRepresentation(#imageLiteral(resourceName: "beauty.jpeg"), 0.2)!
  let url = Bundle.main.url(forResource: "beauty", withExtension: "jpeg");
  // 多文件上傳
  Alamofire.upload(multipartFormData: { (formdata) in

   formdata.append(data, withName: "file", fileName: "beauty.jpeg", mimeType: "image/jpeg") 
   formdata.append(url!, withName: "file2")

  }, to: UPLOAD_URL) { (encodingResult) in

   switch encodingResult{
   case .success(let uploadFile, _, _):
    //上傳進度回調(diào)
    uploadFile.uploadProgress(closure: { (progress) in
     debugPrint("上傳進度\(progress)")
    })
    //上傳結果回調(diào)
    uploadFile.responseString(completionHandler: { (response) in
     LLog(response.result.value)
    })

    break
   case .failure( let error):
    LLog(error);
    break
   }

  }

備注:

想必大家也注意到上面的上傳圖片的代碼,在append data的時候多了一個 filename的參數(shù),在測試的時候,我發(fā)現(xiàn)這個參數(shù)是必須的,如果你傳入的是data數(shù)據(jù),但是如果你使用的是fileurl則可以不用這個參數(shù),在alamofire中 會自己獲取文件的名。

這里寫圖片描述
這里寫圖片描述

如果我們在append data的時候,不傳入文件名,在上面的代碼中 headers中則不會有 filename這個參數(shù),此時使用charles抓包是會發(fā)現(xiàn)如下。

上傳文件并攜帶參數(shù)

var param: [String:String] = [:];
  param["postion"] = "portrait"
  let url = Bundle.main.url(forResource: "beauty", withExtension: "jpeg");
  // 2、多文件上傳
  Alamofire.upload(multipartFormData: { (formdata) in
   formdata.append(url!, withName: "file2")

   //拼接參數(shù)
   for (key, value) in param {
    formdata.append(value.data(using: String.Encoding.utf8)!, withName: key)
   }

  }, to: UPLOAD_URL) { (encodingResult) in

   switch encodingResult{
   case .success(let uploadFile, _, _):
    //上傳進度回調(diào)
    uploadFile.uploadProgress(closure: { (progress) in
     debugPrint("上傳進度\(progress)")
    })
    //上傳結果回調(diào)
    uploadFile.responseJSON(completionHandler: { (response) in
     LLog(response.result.value)
    })

    break
   case .failure( let error):
    LLog(error);
    break
   }



  }

 

備注:在我們的實際開發(fā)中,后臺有時候并沒有配置專門的文件服務器,這個時候我們往往就需要在上傳文件的時候,配置必要的參數(shù),來表明我們上傳文件資源的目的。

最后

Alamofire真的是一個很好用的網(wǎng)絡請求庫,同學們,趕緊開始使用吧!

相關文章

  • Swift里的值類型與引用類型區(qū)別和使用

    Swift里的值類型與引用類型區(qū)別和使用

    這篇文章主要介紹了Swift里的值類型與引用類型區(qū)別和使用,本文講解了值類型與引用類型的區(qū)別、如何選擇類型、什么時候該用值類型、什么時候該用引用類型等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 簡單理解插入排序算法及Swift版的代碼示例

    簡單理解插入排序算法及Swift版的代碼示例

    插入排序算法可以在已排序的序列中將要插入的元素和原有元素保持有序,這里我們來簡單理解插入排序算法及Swift版的代碼示例,需要的朋友可以參考下
    2016-07-07
  • Swift實現(xiàn)文件壓縮和解壓示例代碼

    Swift實現(xiàn)文件壓縮和解壓示例代碼

    本篇文章主要介紹了Swift實現(xiàn)文件壓縮和解壓示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • SwiftUI圖片縮放、拼圖等處理教程

    SwiftUI圖片縮放、拼圖等處理教程

    SwiftUI是一種使用Swift語言在蘋果設備上構建用戶界面的創(chuàng)新且簡單的方式,下面這篇文章主要給大家介紹了關于SwiftUI圖片縮放、拼圖等處理的相關資料,需要的朋友可以參考下
    2021-08-08
  • Swift方法調(diào)度之類的普通方法底層探究

    Swift方法調(diào)度之類的普通方法底層探究

    這篇文章主要介紹了Swift-方法調(diào)度-類的普通方法底層探究,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 使用swift實現(xiàn)計算器功能

    使用swift實現(xiàn)計算器功能

    這篇文章主要為大家詳細介紹了使用swift實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • RxSwift學習教程之類型對象Subject詳解

    RxSwift學習教程之類型對象Subject詳解

    這篇文章主要給大家介紹了關于RxSwift學習教程之類型對象Subject的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起看看吧。
    2017-09-09
  • Swift?Package?技巧及混編兼容問題詳解

    Swift?Package?技巧及混編兼容問題詳解

    這篇文章主要為大家介紹了Swift?Package?技巧及混編兼容問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Swift 3.0基礎學習之閉包

    Swift 3.0基礎學習之閉包

    Swift引進了閉包的概念,這個與object-c的block類似,使用過block的話都知道有多方便,所以開始學Swift,先要把閉包學會,后面使用會很頻繁。下面這篇文章主要介紹了Swift 3.0基礎學習之閉包的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • Swift教程之閉包詳解

    Swift教程之閉包詳解

    這篇文章主要介紹了Swift教程之閉包詳解,閉包可以在上下文的范圍內(nèi)捕獲、存儲任何被定義的常量和變量引用,因這些常量和變量的封閉性,而命名為“閉包(Closures)”,需要的朋友可以參考下
    2015-01-01

最新評論

合山市| 泉州市| 青铜峡市| 寿宁县| 青龙| 三台县| 许昌市| 车致| 武城县| 洛隆县| 龙井市| 阳春市| 合阳县| 朔州市| 稷山县| 绥芬河市| 增城市| 当阳市| 永丰县| 溧水县| 江阴市| 西充县| 张家界市| 固始县| 三明市| 廊坊市| 仲巴县| 新化县| 宁蒗| 克拉玛依市| 富蕴县| 红原县| 桦川县| 湟源县| 井冈山市| 奉贤区| 临清市| 天门市| 承德市| 金溪县| 枣庄市|