繁体   English   中英

Swift-使用无法解析的标识符

[英]Swift - Use of unresolved identifier

我在同一函数中创建所有变量。 但是在函数的最后,即使它是在同一函数中创建的,我也无法达到该常数。

当我最后写“ self.resultLabel.text = weather”时,Xcode向我显示了一个错误的未解析标识符“ weather”的使用

我知道如何解决。 我需要在task方法启动后立即启动“天气”并将其设置为“”,然后我应该在函数中更改其值,但是即使我不这样做并且我在if闭包中创建它,也不应我可以在相同功能范围内达到目标吗?

我不明白为什么它会一直给我这个错误。

func findWeather() {

        var errorStatus = false

        city = (cityField.text?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()))!

        let url = NSURL(string: "http://www.weather-forecast.com/locations/" + city.stringByReplacingOccurrencesOfString(" ", withString: "-") + "/forecasts/latest")!

        let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in

            if let content = data {

                let urlContent = NSString(data: content, encoding: NSUTF8StringEncoding) as NSString!
                let weatherContent = urlContent.componentsSeparatedByString("<span class=\"phrase\">")
                if weatherContent.count > 1 {

                    let weather = weatherContent[1].componentsSeparatedByString("</span>")[0].stringByReplacingOccurrencesOfString("&deg;", withString: "˚")


                } else {

                    var weather = ""
                    errorStatus = true

                }


            } else {

                var weather = ""
                errorStatus = true

            }


            dispatch_async(dispatch_get_main_queue(), { () -> Void in

                if errorStatus == true {

                    self.showError()

                } else {

                    self.resultLabel.text = weather // I get error: use of unresolved identifier 'weather'

                }

            })

        }

        task?.resume()

您正在定义太多新的变量weather ,这些变量只能在它们所在的花括号之间局部可见。

定义weather的最佳位置是在task关闭的开始,并且必须删除该变量随后出现的所有varlet声明。

这里是关键部分:

 let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in

    var weather = ""
    if let content = data {
      let urlContent = NSString(data: content, encoding: NSUTF8StringEncoding) as NSString!
      let weatherContent = urlContent.componentsSeparatedByString("<span class=\"phrase\">")
      if weatherContent.count > 1 {
        weather = weatherContent[1].componentsSeparatedByString("</span>")[0].stringByReplacingOccurrencesOfString("&deg;", withString: "˚")
      } else {
        errorStatus = true
      }
    } else {
      errorStatus = true
    }

...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM