2015-08-27 57 views
1

我想實現在日誌中服務的應用程序,我想拋出一個異常,如果響應狀態代碼不等於200,我使用Alamofire內拋出異常作爲HTTP網絡庫。雨燕2.0:異步代碼段

static func loginWithUsername(username: String, andPassword password: String) throws { 

    let action = "SmartShoppers/login" 
    let url = baseUrl + action 


    Alamofire.request(.POST, url, parameters: ["username": username, "password": password]) 
     .response { request, response, data, error in 
      if response?.statusCode != 200 { 
       throw ServiceError.LogInError 
      } 
    } 
} 

這是服務錯誤枚舉定義:

enum ServiceError: ErrorType { 
    case LogInError 
} 

我想要做的,當它在當按下一個按鈕,就調用該函數被拋出處理這個異常。該函數位於與包含該按鈕的ViewController關聯的ViewController類中。那將要執行的代碼是:

do { 
    try Service.loginWithUsername(username, andPassword: password) 
} catch { 
    // SHOW AN ALERT MESSAGE 
} 

爲什麼我收到消息Cannot call value of non-function type 'NSHTTPURLResponse'?這是實施這項服務的正確方法嗎?如果不是,請幫助我。

回答

2

您傳遞給response方法的關閉在其簽名中不包含throws,因此您將無法從其中引發異常。

IMO這不是你想要拋出異常的情況,反正 - 非200響應代碼不是一個特殊的錯誤/失敗,我不會嘗試在這裏使用異常作爲一種手段控制流。

+1

我怎麼能包括'throws'的簽名?我必須輸入Alamofire代碼嗎? – lmiguelvargasf

+0

那就是你會開始,是的 - 例如,如果您正在使用V1.3.1,你會在這裏找到你的'response'函數定義 - > https://github.com/Alamofire/Alamofire/blob/1.3.1/Source/ResponseSerialization.swift#L116 - 但是,我會建議不要去這條路線 – fqdn

+0

你不能這樣扔。我會在這裏遵循@ fqdn的建議。如果你想了解究竟爲什麼你不能把這種方式,我建議你嘗試通過一個例子在您創建一個完成處理異步登錄方法遊樂場工作,試圖使其在一個異步的方式拋出。它不起作用。這正是我們在Alamofire中使用'Result'類型的原因。 – cnoon