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)" 
} 

내가있는 viewDidLoad에 updateMainUI를 호출 물론 해요 ,하지만 IMHO UI를 업데이트하는 메서드는 아마도 JSON에서 데이터를 가져 오기 전에 호출됩니다 생각합니다.

앱의 레이블에 120이 표시되어 있으므로 아무 것도없는 것으로 간주됩니다 ... 잘못된 것이 있으면 괄호를 사용해주세요. 조언 :에 도움을 감사

편집 :

오 내가 API의 데이터가 완벽하게 괜찮 .. 추가하는 것을 잊었다, 그래서 API에 대한 호출이 :

+1

'completion' 핸들러가 호출 된 후에 다시 UI를 업데이트해야하는데, 그 시점에서만 데이터를 사용할 수 있습니다. – 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() 
    } 
}