iOS開發(fā)--swift封裝網(wǎng)絡(luò)中間層及OC調(diào)用swift方法

前段時間發(fā)一篇博客,里面講到了OC中封裝網(wǎng)絡(luò)中間層的作用,和具體實現(xiàn)代碼。在swift中也可以封裝網(wǎng)絡(luò)中間層,然后再通過網(wǎng)絡(luò)中間層來請求網(wǎng)絡(luò)數(shù)據(jù)。封裝網(wǎng)絡(luò)多線程的好處是我們能夠很方便地將中間使用的網(wǎng)絡(luò)請求框架進(jìn)行替換。具體原理像下面兩張圖片那樣。

1.png


如果使用第一張圖片顯示的那種方式請求數(shù)據(jù),每一個ViewController都通過AFN來請求數(shù)據(jù),我們替換數(shù)據(jù)的請求框架的時候需要將每個使用AFN框架的代碼進(jìn)行修改。如果我們使用一個網(wǎng)絡(luò)中間層 進(jìn)行封裝。替換框架的時候只需要修改中間的AFN。之前發(fā)的一篇博客對于封裝網(wǎng)絡(luò)多線程的方式有更詳細(xì)的說明。如果對于網(wǎng)絡(luò)中間層的好處還沒看懂,建議前往觀看那篇博客。博客地址iOS開發(fā)--OC網(wǎng)絡(luò)請求中網(wǎng)絡(luò)中間層的使用。
實現(xiàn)封裝網(wǎng)絡(luò)中間層,需要封裝一個網(wǎng)絡(luò)請求數(shù)據(jù)的方法,在方法中再使用具體的框架進(jìn)行網(wǎng)絡(luò)請求。而網(wǎng)絡(luò)請求需要的參數(shù)就通過方法的參數(shù)傳遞進(jìn)去。這個網(wǎng)絡(luò)請求的方法,是上面圖片中的網(wǎng)絡(luò)請求工具。
封裝網(wǎng)絡(luò)請求時我們先自定義一個處理網(wǎng)絡(luò)請求的工具類SwiftNetWorkTool,該工具類繼承自AFHTTPSessionManager。然后在該類中定義網(wǎng)絡(luò)請求的方法。

import UIKit

class SwiftNetWorkTool: AFHTTPSessionManager {

  //創(chuàng)建一個單例
 static let shareTool = SwiftNetWorkTool()
 
  // get請求和post請求
  func request(urlstr : String, method : String, parameters : [String : AnyObject]?, callBack : (AnyObject?) -> ()) {
   
    //定義請求數(shù)據(jù)成功后用于返回數(shù)據(jù)的閉包,這是一個尾隨閉包
    let success = {
      //參數(shù)用小括號包起來
      (task: NSURLSessionDataTask, responseObject: AnyObject?) -> Void in callBack(responseObject)
    }
   
    //定義請求數(shù)據(jù)失敗后用于返回失敗信息的閉包,同樣也是一個尾隨閉包
    let failure = {
      (task : NSURLSessionDataTask?, error : NSError) -> Void in
      print(error)
      callBack(nil)
    }
  
    //判斷是GET方法,還是POST方法,再調(diào)用對應(yīng)的方法,并將需要返回的數(shù)據(jù)通過閉包進(jìn)行返回
    if method == "GET" {
      //解決bug時照著提示進(jìn)行操作
      self.GET(urlstr, parameters: parameters, progress: nil, success: success, failure: failure)
    }
   
    if method == "POST" {
      self.POST(urlstr, parameters: parameters, progress: nil, success: success, failure: failure)
    }
  }
}

接下來我們在SwiftViewController中調(diào)用該方法進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)請求

import UIKit

class SwiftViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    //調(diào)用加載數(shù)據(jù)的方法
    loadData()
  }

  func loadData(){
    SwiftNetWorkTool.shareTool.GET("https://httpbin.org/get?name=xiaoming", parameters: ["age":20], progress: nil, success: { ( task, responseObject) in
     
        print(responseObject)
      }) { (task ,error) in
        print(error)
    }
  }
 
  func loadData2(){

    SwiftNetWorkTool.shareTool.POST("https://httpbin.org/get?name=xiaoming", parameters: ["age" : 20], progress: nil, success: { (task, responseObject) in
      print(responseObject)
      }) { (task , error) in
      print(error)
    }
  }
}

上面內(nèi)容是封裝網(wǎng)絡(luò)中間的做法,我們封裝了swift中的網(wǎng)絡(luò)中間層,這個中間層可以在OC方面使用,我們先把我們創(chuàng)建的swift文件拉入到OC項目文件中,把swift文件拉入OC文件的時候,會彈出下面一個窗口。點擊最右邊的按鈕,創(chuàng)建一個橋鏈接,xCode會自動幫我們創(chuàng)建一個橋接文件。

4.png

如果你還需要自定義橋接文件,就在這里進(jìn)行設(shè)置。

6.png

在OC調(diào)用swift方法之前,我們還要再做下面的設(shè)置。


做了上面設(shè)置后我們就能在OC中調(diào)用swift方法了。
項目文件已經(jīng)上傳到git,點擊下面鏈接可以下載。demo地址

最后編輯于
?著作權(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)容

  • 在有些項目里面點擊TabbarItem需要判斷用戶是否登陸,如果登陸則進(jìn)入,未登錄就跳轉(zhuǎn)登陸界面.如果在點擊的Ta...
    TotoroLee閱讀 5,938評論 19 14
  • 日目標(biāo):1800 當(dāng)月目標(biāo):54000 當(dāng)日銷售:0 現(xiàn)在銷售:80000 當(dāng)日差比:-1800 當(dāng)月差比:260...
    c6397a55fadf閱讀 234評論 0 0
  • 今晚,想起一個遙遠(yuǎn)的夢 多少年后,我會不會學(xué)會穿墻 會不會穿墻的時候,把頭 往上撞。 空無一人的晚上,我一次次踏碎...
    紅精靈閱讀 133評論 0 2
  • 孩子為什么依賴手機(jī)? 孩子依賴手機(jī)的原因不盡相同: 社交型依賴。手機(jī)通訊錄里有200個好友,微信朋友圈里有300好...
    思念ok閱讀 426評論 0 0

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