2015-08-13 96 views
0

我試圖解決http請求問題,因爲我很難理解所有關於同步和異步方法的知識。 我只想知道如何讓編譯器等待啓動http請求完成,然後才能繼續執行?以swift方式發送http請求

例如,我需要獲取一些頁面,解析數據並將其發佈到另一個頁面。但是,當發佈從第一個請求解析的數據的請求首先執行,然後才解析數據執行請求 - 我有一個很大的麻煩。

回答

1

您應該避免同步網絡請求作爲瘟疫。它有兩個主要問題:

  • 請求塊你的UI如果不從不同線程調用這是很大的禁忌偉大質量的應用程序(當然,對於真正的應用程序)
  • 沒有辦法如何取消該請求,除非它自己的錯誤

我建議你使用一些良好的網絡請求庫,如AlamofireAFNetworking。對於Swift和你想要完成的事情,我推薦Alamofire,因爲它更容易使用,涵蓋了你需要的所有基本功能。

可以這樣執行基本要求:現在

// Perform GET request 
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["key": "value"]) 
     .response { request, response, data, error in 

       // Do something with response or error 
       println(response) 
       println(error) 
      } 

,至於你的問題,你可以隨時到網絡操作完成阻塞UI,推遲performSegue,或者乾脆禁止「下一步」吧按鈕,直到獲得響應,或者僅通過將視圖與進度欄/微調器疊加,例如使用SVProgressHUD library。結合在一起,你可以這樣做:

// Show progress HUD. This disables user interaction by default 
SVProgressHUD.show() 

// Perform GET request 
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["key": "value"]) 
     .response { request, response, data, error in 

       // Do something with response or error 
       println(response) 
       println(error) 

       // Hide progress to enable user interaction again 
       SVProgressHUD.dismiss() 

       // Or optionally perform transition to different controller here 
       self.performSegueWithIdentifier(identifier, sender: nil) 
      } 

希望它有幫助!

+0

很好,謝謝。 – SwiftStudier

+0

歡迎您:) –