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
}
}
temp
是可以具有或不具有值的Optional
。let list = responseModel?.list[0]
if let temp = list.main.temp {
// temp is an Int
} else {
// No value
}