Asynchronous Swift 2.0:在异步代码段中引发异常

Asynchronous Swift 2.0:在异步代码段中引发异常,asynchronous,swift2,alamofire,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

我正在尝试为应用程序实现登录服务,如果响应状态代码不等于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
}

为什么我收到消息
无法调用非函数类型“NSHTTPURLResponse”的值
?这是实现此服务的正确方法吗?如果没有,请帮助我。

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


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

我如何在签名中包含
抛出
?我必须输入Alamofire代码吗?这就是您要开始的地方,是的——例如,如果您使用的是v1.3.1,您将在此处找到您的
响应
函数定义->——但是,我建议不要走这条路,您不能以这种方式抛出。在这里,我将遵循@fqdn的建议。如果您想确切地理解为什么不能以这种方式抛出,我建议您尝试在游乐场中使用一个示例,在该示例中,您使用完成处理程序创建一个异步登录方法,并尝试以异步方式抛出它。它不起作用。这正是我们在Alamofire中使用
Result
类型的原因。我还想抛出一个异常。如果响应不同于200。我的任务是用其他方法管理此异常