由于某种原因,每当我尝试使用self.infoLabel.text = String(temp!)代码块内的DispatchQueue用当前温度更新标签时,都会收到以下致命错误消息:

unexpectedly found nil while unwrapping an Optional value.


如果有人可以帮助我找出下面的代码为什么不起作用,我将不胜感激。谢谢。

func getCurrentTemp(city: String){

    let weatherRequestURL = URL(string: "\(openWeatherMapBaseURL)?APPID=\(openWeatherMapAPIKey)&q=\(city)")!

    // The data task retrieves the data.


    URLSession.shared.dataTask(with: weatherRequestURL) { (data, response, error) in

        if let error = error {
            // Case 1: Error

            print("Error:\n\(error)")
        }
        else {

            //print("Raw data:\n\(data!)\n")
            //let dataString = String(data: data!, encoding: String.Encoding.utf8)
            //print("Human-readable data:\n\(dataString!)")

            do {
                // Try to convert that data into a Swift dictionary
                let weather = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]

                if let main = weather["main"] as? [String: Any] {

                    let temp = main["temp"] as? Double
                    print("temp\(temp!)")

                    DispatchQueue.main.sync(execute: {




                        self.infoLabel.text = String(temp!)

                    })
                    //return temp as? String

                    //let temp_max = main["temp_max"] as? Double
                    //print("temp\(temp_max!)")

                    //let temp_min = main["temp_min"] as? Double
                    //print("temp\(temp_min!)")

                }
            }
            catch let jsonError as NSError {
                // An error occurred while trying to convert the data into a Swift dictionary.
                print("JSON error description: \(jsonError.description)")
            }

        }
    }

    .resume()


}

最佳答案

这里有两种可能性:1)temp为nil(并且不应该是因为您已经在上面的print语句中强行解开它)2)或infoLabel为nil,这发生在断开出口连接时。

它易于检查;在您的分配上方创建一个断点,然后在调试控制台中键入:

po self.infoLabel


看看是否为零。要采取良好措施,还应检查温度。

您还可以添加打印语句以检查self.infoLabel或断言。

10-08 05:48