我正在尝试为应用程序实现登录服务,如果响应状态代码不等于200,我想抛出异常。我使用Alamofire作为HTTP网络库。
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
}
}
}
这是ServiceError枚举定义:
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'
消息?这是实施此服务的正确方法吗?如果没有,请帮助我。
答案 0 :(得分:2)
您传递给response
方法的闭包在其签名中不包含throws
,因此您将无法从其中抛出异常。
IMO这不是你想要抛出异常的情况 - 无论如何 - 非200响应代码不是特殊的错误/失败,我不会尝试在这里使用异常作为手段控制流程。