0
我試圖解決http請求問題,因爲我很難理解所有關於同步和異步方法的知識。 我只想知道如何讓編譯器等待啓動http請求完成,然後才能繼續執行?以swift方式發送http請求
例如,我需要獲取一些頁面,解析數據並將其發佈到另一個頁面。但是,當發佈從第一個請求解析的數據的請求首先執行,然後才解析數據執行請求 - 我有一個很大的麻煩。
我試圖解決http請求問題,因爲我很難理解所有關於同步和異步方法的知識。 我只想知道如何讓編譯器等待啓動http請求完成,然後才能繼續執行?以swift方式發送http請求
例如,我需要獲取一些頁面,解析數據並將其發佈到另一個頁面。但是,當發佈從第一個請求解析的數據的請求首先執行,然後才解析數據執行請求 - 我有一個很大的麻煩。
您應該避免同步網絡請求作爲瘟疫。它有兩個主要問題:
我建議你使用一些良好的網絡請求庫,如Alamofire或AFNetworking。對於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)
}
希望它有幫助!
很好,謝謝。 – SwiftStudier
歡迎您:) –