使用未解析的标识符' json' (斯威夫特3)(Alamofire)

时间:2017-04-15 21:19:52

标签: json swift3 alamofire swifty-json

我收到错误:使用未解析的标识符' json'

从这一行开始:if let data = json["data"] ...

这是与错误相关的代码片段

        // check response & if url request is good then display the results
        if let json = response.result.value! as? [String: Any] {

            print("json: \(json)")
        }

        if let data = json["data"] as? Dictionary<String, AnyObject> {
            if let weather = data["weather"] as? [Dictionary<String, AnyObject>] {
                if let uv = weather[0]["uvIndex"] as? String {
                    if let uvI = Int(uv) {
                        self.uvIndex = uvI
                        print ("UV INDEX = \(uvI)")
                    }
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

您有一个范围问题。 json变量只能在if let语句中访问。

要解决这个问题,一个简单的解决方案是将其余代码移到第一个if let语句的大括号内:

if let json = response.result.value! as? [String: Any] {
    print("json: \(json)")
    if let data = json["data"] as? Dictionary<String, AnyObject> {
        if let weather = data["weather"] as? [Dictionary<String, AnyObject>] {
            if let uv = weather[0]["uvIndex"] as? String {
                if let uvI = Int(uv) {
                    self.uvIndex = uvI
                    print ("UV INDEX = \(uvI)")
                }
            }
        }
    }
}

从代码中可以看出,嵌套开始使代码难以读取。避免嵌套的一种方法是使用guard语句,该语句将新变量保留在外部范围内。

guard let json = response.result.value else { return }

// can use the `json` variable here
if let data = json["data"] // etc.