I got Optional(3.48) in simulator and don't understand how to get this value without "Option()" just value. In tableview every cell same but I need just 5 cells with different info for every day. The data parsed with json. I provided my code and hope that anybody can help me. I will be pleased for any help.
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
}
}