首页 > 解决方案 > 斯威夫特我得到 Optional(3.48) 到温度标签和表格视图单元格中的信息在每个单元格中都相同

问题描述

我在模拟器中得到了 Optional(3.48),不明白如何在没有“Option()”的情况下获得这个值。在表格视图中,每个单元格都相同,但我每天只需要 5 个不同信息的单元格。用json解析的数据。我提供了我的代码,希望有人可以帮助我。我会很高兴得到任何帮助。

import UIKit
import Foundation

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var cityNameLabel: UILabel!
@IBOutlet weak var temperatureLabel: UILabel!
@IBOutlet weak var weatherNowLabel: UILabel!
@IBOutlet weak var dailyWeatherTableView: UITableView!

var responseModel: WeatherForecast?
var degreeSymbol = "º"


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    currentWeatherRequest()
    dailyWeatherTableView.delegate = self
    dailyWeatherTableView.dataSource = self
    updateView()
    //self.dailyWeatherTableView.automatic
}
func currentWeatherRequest() {
let session = URLSession.shared
    let weatherURL = URL(string: "http://api.openweathermap.org/data/2.5/forecast?q=cityname?&units=metric&APPID=")!
let dataTask = session.dataTask(with: weatherURL) { (data: Data?,response: URLResponse?,error: Error?) in
        if let error = error {
            print("Error:\n\(error)")

        } else {
            if let jsonData = data {

                do {
                    let dataString = String(data: jsonData, encoding: String.Encoding.utf8)
          print("Daily weather data:\n\(dataString!)")
                let decoder = JSONDecoder()
                    self.responseModel = try decoder.decode(WeatherForecast.self, from: jsonData)

                    DispatchQueue.main.async {
                        self.cityNameLabel.text = self.responseModel?.city.name
                       // self.temperatureLabel.text = String(describing: self.responseModel?.list[0].main.feelsLike)
                       self.weatherNowLabel.text = (self.responseModel?.list[0].weather[0].main).map { $0.rawValue }
                        self.dailyWeatherTableView.reloadData()
                        self.updateView()
                    }

                } catch let error {
                  print("Error: \(error)")
                }
            }else {
            print("Error: did not receive data")

        }
        }
    }
    dataTask.resume()

  }
  public   func updateView(){
    self.temperatureLabel.text = String(describing: responseModel?.list[0].main.temp)
  }
  public    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return responseModel?.list.count ?? 5
  }



  public     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       guard let cell = tableView.dequeueReusableCell(withIdentifier: "FullDayWeatherCell", for: indexPath) as? DailyWeatherViewCell else { return UITableViewCell() }
        cell.minMaxTempLabel.text = "\(String(describing: responseModel?.list[0].main.tempMin))\(self.degreeSymbol) - \(String(describing: responseModel?.list[0].main.tempMax))\(self.degreeSymbol)"

        cell.weatherLabel.text = (self.responseModel?.list[0].weather[0].main).map { $0.rawValue }
        return cell


        }
 private  func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableView.automaticDimension
}

}

标签: swiftxcodetableview

解决方案


在发布基本问题之前,请先了解 Optionals,

https://developer.apple.com/documentation/swift/optional

temp是一个Optional可能有也可能没有价值的东西。

let list = responseModel?.list[0]
if let temp = list.main.temp {
 // temp is an Int
} else {
 // No value
}

推荐阅读