Swift 2.0:在异步代码段中抛出异常

时间:2015-08-27 17:02:39

标签: asynchronous swift2 alamofire

我正在尝试为应用程序实现登录服务,如果响应状态代码不等于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'消息?这是实施此服务的正确方法吗?如果没有,请帮助我。

1 个答案:

答案 0 :(得分:2)

您传递给response方法的闭包在其签名中不包含throws,因此您将无法从其中抛出异常。

IMO这不是你想要抛出异常的情况 - 无论如何 - 非200响应代码不是特殊的错误/失败,我不会尝试在这里使用异常作为手段控制流程。