使用陈述

时间:2016-04-27 19:11:19

标签: ios swift

我在Swift中发出了一个网址请求,并希望打印一个有意义的错误,包括响应代码,如果它们是一个。我尝试在尽可能少的代码行中执行此操作。我在XCode中遇到的错误如下:Variable declared in 'guard' condition not usable in its body

如何在不将代码膨胀到更多行的情况下执行以下操作,是否可能?

 //check to see if we got a valid response code
    guard let resCode = (response as? NSHTTPURLResponse)?.statusCode where resCode == 200 else {
        return NSError(domain: "Error with request", code: 1, userInfo: [NSLocalizedDescriptionKey: "Recieved the following status code: \(resCode)"])
    }

我尝试在guard语句的主体中使用变量resCode时发生错误。

1 个答案:

答案 0 :(得分:9)

如错误所述,您不能使用绑定在guard语句主体内的guard语句中的变量。该变量仅在未输入保护体的情况下受到约束。您也没有区分您的回复为零且状态代码不是200的情况。

您应该将陈述分为两个不同的检查:

guard let httpResponse = response as? NSHTTPURLResponse else {
    return NSError(domain: "Error with request", code: 1, userInfo: [NSLocalizedDescriptionKey: "Invalid response: \(response)"])
}

guard httpResponse.statusCode == 200 else {
    return NSError(domain: "Error with request", code: 1, userInfo: [NSLocalizedDescriptionKey: "Recieved the following status code: \(httpResponse.statusCode)"])
}

不要以牺牲可读性或正确性为代价来尽量减少代码行数。