Это мой сценарий. Я начинаю с json api из openweather, а затем создаю класс Weather с некоторыми свойствами. Внутри объекта Weather я создаю функцию с именем downloadWeather
для фактического анализа api, тогда я разрешаю анализируемое значение сохранять в свойствах.Содержимое от JSON фактически не отображается в UI
Например, self.max_temp = valueParsedFromJSON
. Затем в MainViewController, внутри ViewDidload, я создаю экземпляр Weather, который является функцией погоды, вызовите функцию downloadWeather, а затем обновите метку ui, соответствующую weather.somproperty. Содержимое, загруженное в консоль (только для отладки), прекрасно, но оно вообще не отображает содержимое в ui. Какова причина? Это мой фактический код:
var currentWeather:CurrentWeather!
// in MainViewControler.swift
// create weather instance to call downloadWeatherDetails function
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
currentWeather = CurrentWeather()
let completed = currentWeather.downloadWeatherDetails()
if completed == "completed" {
self.updateUI()
}
}
class CurrentWeather {
// this is CurrentWeather.swift where I save all the information in itself
var _cityName:String!
var _date:String!
var _weatherType:String!
var _currentTemp:Double!
var cityName: String {
if _cityName == nil {
_cityName = ""
}
return _cityName
}
var date: String {
if _date == nil {
_date = ""
}
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .none
let currentDate = dateFormatter.string(from: Date())
self._date = "Today, \(currentDate)"
return _date
}
var weatherType: String {
if _weatherType == nil {
_weatherType = ""
}
return _weatherType
}
var currentTemp: Double {
if _currentTemp == nil {
_currentTemp = 0.0
return _currentTemp
}
return _currentTemp
}
func downloadWeatherDetails(/*completed: DownloadComplete*/) -> String {
let currentWeatherURl:URL = URL(string: current_weather_url)!
Alamofire.request(currentWeatherURl).responseJSON { response in
let result = response.result
if let dict = result.value as? Dictionary<String, AnyObject> {
if let main = dict["main"] as? Dictionary<String, AnyObject> {
if let currentTempInKev:Double = main["temp"] as? Double {
let currentTempInCel = Double(round(currentTempInKev - 273.15))
self._currentTemp = currentTempInCel
}
}
if let weatherArr = dict["weather"] as? [Dictionary<String, AnyObject>] {
if let main = weatherArr[0]["main"] as? String {
self._weatherType = main.capitalized
}
}
if let name = dict["name"] as? String {
self._cityName = name
}
}
print(self.currentTemp)
print(self.weatherType)
print(self.cityName)
}
return "completed"
}
// the above works fine, but when called in MainViewController, properties is not rendered into UI
}
вы пытались перезагрузить TableView? – Wolverine
Извините, но это не мое дело. Это просто отображается для раздела, теперь я пока не работаю для просмотра таблиц. В любом случае, спасибо вам большое. –