ios - 无法在 Swift 4 中将值打印到标签。展开可选值错误时意外发现 nil

标签 ios swift xcode api label

我一直在从事一个个人项目,并在 swift 4 中为 iOS 制作了一个天气检查应用程序,我让 OpenWeatherMap API 工作并解析 JSON 数据,我可以在控制台中获取它们的值。现在我想简单地将标签“T”的值设置为等于“ggtemp”的值,即当前温度。我尝试将其放在 if 语句中,“if T != nil”执行此操作等,但我无法让任何东西起作用。如有帮助,将不胜感激。谢谢。

代码如下:

import UIKit



    struct Coordinate : Decodable {
        let lat, lon : Double?
    }

    struct Weather : Decodable {
        let id : Int?
        let main, description, icon : String?
    }

    struct Sys : Decodable {
        let type, id : Int?
        let sunrise, sunset : Date?
        let message : Double?
        let country : String?
    }

    struct Main : Decodable {
        let temp, tempMin, tempMax : Double?
        let pressure, humidity : Int?
    }

    struct Wind : Decodable {
        let speed : Double?
        let deg : Int?
    }

    struct MyWeather : Decodable {
        let coord : Coordinate?
        let cod, visibility, id : Int?
        let name : String?
        let base : String?
        let weather : [Weather]?
        let sys : Sys?
        let main : Main?
        let wind : Wind?
        let dt : Date?
    }
    class ViewController: UIViewController {


        //Labels
        @IBOutlet weak var thumidity: UILabel!
        @IBOutlet weak var tmain: UILabel!
           @IBOutlet  weak var ttemp: UILabel!
           @IBOutlet weak var tspeed: UILabel!

           @IBOutlet weak var gmain: UILabel!
           @IBOutlet weak var gtemp: UILabel!
           @IBOutlet weak var ghumidity: UILabel!
           @IBOutlet weak var gspeed: UILabel!
          @IBOutlet  weak var T: UILabel!


        override func viewDidLoad() {
            super.viewDidLoad()



            guard let APIUrl = URL(string: "https://api.openweathermap.org/data/2.5/weather?q=Crowland&appid=e7b2054dc37b1f464d912c00dd309595&units=Metric") else { return }

            URLSession.shared.dataTask(with: APIUrl) { data, response, error in
                guard let data = data else { return }

                let decoder = JSONDecoder()


                do {
                    let weatherData = try decoder.decode(MyWeather.self, from: data)


                    if let gmain = weatherData.weather?.description {
                        print(gmain)
                       // tmain.text = String(describing: gmain)
                    }


                    if let gspeed = weatherData.wind?.speed {
                        print(gspeed)
                        //speed.text = String(gspeed)
                    }

                    if let ghumidity = weatherData.main?.humidity {
                        print(ghumidity)
                    }


                        if let ggtemp = weatherData.main?.temp {

                            print(ggtemp, "TEST")

                                self.T.text? = String (ggtemp)


                    }

                } catch {
                    print(error.localizedDescription)
                }
                }.resume()
        }
    }

最佳答案

如果你写 self.T.text 时不带问号(这意味着它是一个可选的或者可以是 nil)怎么办?

关于ios - 无法在 Swift 4 中将值打印到标签。展开可选值错误时意外发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51770818/

相关文章:

ios - 限制tableView中显示的单元格数量,滚动到最后一个单元格时加载更多单元格

ios - 我如何告诉 RxSwift 做某事,无论成功或失败

ios - 当我播放嵌入的YouTube视频时,如何将我的iOS应用名称作为流量来源传递?

ios - Realm 列表与 LinkingObjects 性能

ios - 我如何继承 UIView?

swift - 将多个字段添加到 CloudKit 中的同一 recordName 行

objective-c - 在核心数据中传递对象

swift - 文件夹中的图像未出现

xcode - 从新的 Firebase(数据库)中检索数据

ios - Xcode 项目为 FIRAnalyticsConnector.framework 提供 pod 文件错误。如何解决?