我目前正在實施與通過HTTP斯威夫特使用NSURLSession類REST API通信的網絡模型。NSURLSession數據任務的響應處理
爲了製作要求,我用這個代碼:
var request = URLRequest(url: requestURL) // url is "http://somethingsomething...
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = body
現在,我發送請求這樣:
session.dataTask(with: request) { data, response, error in
// Parse the data, response and error
}.resume()
我的問題是,我要檢查的在httpStatusCode
響應,以便通知關於可能的錯誤,但是,在完成塊內的response
是類型,不HTTPURLResponse
的。這意味着我必須將response
轉換爲HTTPURLResponse
類型。到目前爲止,我已經想到了兩種方法來處理它 - 首先是添加另一個處理「無法投射到HTTPURLResponse」場景的錯誤場景,另一種方法是將演員強制轉換爲HTTPURLResponse
。第一個選項似乎更好,但它可能只是添加一些無用的代碼,因爲也許演員總是會成功?
所以基本上,我的問題是 - 我可以肯定,如果我發送請求到HTTP服務器,響應將始終是HTTPURLResponse
類型?或者,我是否必須實現處理response
對象具有不同類型或零位的情況的代碼?
而且,我認爲這將是很好的一提的是在我的實現,如果完成塊將返回錯誤不是零,則該流程將嘗試投放任何東西之前返回。
在這種情況下,我仍然有未處理的情形,其中部分'如果讓類HTTPResponse =爲響應? HTTPURLResponse'失敗。我的問題是 - 如果我正在與HTTP服務器交互,我能100%確定它不會失敗嗎? – user3581248
我使用每天與HTTP服務器進行交互,並且它永遠不會失敗。 – Sethmr
@ user3581248 - 不,你不能保證,這將是'HTTPURLResponse',這就是爲什麼你必須'如果let'或'後衛let'安全解開它。鑑於最終用戶並不在意爲什麼它失敗了,只是它做了或不做,我在我的'if' /'guard'聲明中檢查了兩個,例如, '警衛讓httpResponse =響應爲? HTTPURLResponse,httpResponse.statusCode == 200 else {//處理錯誤}。 – Rob