2016-10-31 3 views
0

Я делаю приложение погоды с помощью OpenweatherAPI. Я загружаю данные из Интернета, но когда я хочу передать его другому классу, он отображается как ноль. Вот код:iOS Swift App, Openweather API

Так что это класс я получаю данные из API

var currentTemp: Double { 
    if _currentTemp == nil { 
     _currentTemp = 120.0 
    } 
    return _currentTemp 
} 

func downloadWeatherDetails(completed: @escaping DownloadComplete) { 
    Alamofire.request(CURRENT_WEATHER_URL).responseJSON { response in 
     let result = response.result 

     if let dict = result.value as? Dictionary<String, Any> { 
      if let main = dict["main"] as? Dictionary<String, Any> { 
       if let currentTemperature = main["temp"] as? double_t { 

        let kelvinToCelsiusPreDivision = (currentTemperature - 273.15) 
        let kelvinToCelsius = Double(round((10 * kelvinToCelsiusPreDivision)/10)) 

        self._currentTemp = kelvinToCelsius 
        print(self._currentTemp) 
       } 
      } 
     } 
     completed() 
} } 

И в mainVC - ViewController:

func updateMainUI() { 
    currentTempLabel.text = "\(currentWeather.currentTemp)" 
} 

Я, конечно, вызывающему updateMainUI в ViewDidLoad , но IMHO Я думаю, что метод, который обновляет пользовательский интерфейс, вероятно, вызывается перед получением данных из JSON.

Ярлык приложения показывает 120 - так что он считается нулевым ... Извините, скобки, если что-то не так. Спасибо за помощь в совет :)

EDIT:

Оу, и я забыл добавить .. Данные API прекрасно подходит, поэтому вызов API работает :)

+1

Необходимо выполнить обновление интерфейса после того, как обработчик 'завершения' был вызван, и только в этот момент данные будут доступны. – dlbuckley

ответ

0

// I Надеюсь, что это поможет

func downloadWeatherDetails(completed: @escaping DownloadComplete) { 
    //Download Current Weather Data 
    Alamofire.request(CURRENT_WEATHER_URL).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 currentTemperature = main["temp"] as? Double { 

        let kelvinToFarenheitPreDivision = (currentTemperature * (9/5) - 459.67) 

        let kelvinToFarenheit = Double(round(10 * kelvinToFarenheitPreDivision/10)) 

        self._currentTemp = kelvinToFarenheit 
        print(self._currentTemp) 
       } 
      } 
     } 
     completed() 
    } 
} 
Смежные вопросы