swift - 斯威夫特我得到 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
}
}
解决方案
在发布基本问题之前,请先了解 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
}
推荐阅读
- android - 是否有图像视图的功能,当我们按下图像按钮时它应该显示,如果我们实现按钮,前一个图像应该显示?
- jquery - 使用 jQuery 访问选择标记元素值
- ansible - 如何从 YAML 中的另一个动态变量分配变量
- shell - 我有一个文本“abcdef”。我想打印“bcd”。能给我一些方法吗?
- javascript - 如何创建一个每次都生成一个新变量的 for 循环
- presto - Presto SQL 是否像 SQL Server 一样支持使用 CTE 进行递归查询?例如员工层级
- twilio - 添加 Studio Flow 后,Twilio REST 客户端停止工作?
- python-3.x - 没有名为“bitmex_websocket”的模块
- python - 查找更改整数以匹配列表中其他人的最小移动次数
- c# - Telerik WinForm RadGridView 清除过滤