1
這是我的場景。我從openweather的json api開始,然後用一些屬性創建一個Weather類。在Weather實體內部,我創建了一個名爲downloadWeather
的函數來實際解析api,然後我允許解析值保存在屬性中。例如,self.max_temp = valueParsedFromJSON
。然後在MainViewController的ViewDidload內部,我創建一個天氣實例,它是天氣,調用函數downloadWeather,然後更新與weather.somproperty對應的ui標籤。下載到控制檯中的內容(僅用於調試)沒有問題,但它不會將內容呈現到UI中。是什麼原因?這是我的實際代碼:來自JSON的內容實際上並未呈現到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
對不起,但它不是我的情況。這只是顯示一段,現在我還沒有爲tableview工作。無論如何,非常感謝你。 –