2017-02-21 28 views
0

Я работаю над погодным приложением iOS с модулем API Alamofire. Я написал код для получения информации из сети для обновления погоды, и я получаю ее, когда печатаю ее сразу после получения информации, но я не могу получить эту информацию, чтобы показать ее в контроллере.Проект Alamofire, где я получаю ответ в моей текущей функции, но не в другом родительском классе

Вот код.

public var cityName:String{ 
    if _cityName==nil{ 
     _cityName = "Didn't find any" 
    } 
    return _cityName 
} 

public var weatherType:String{ 
    if _weatherType==nil{ 
     _weatherType="oops" 
    } 
    return _weatherType 
} 

public var currentTemp: Double{ 
    if _currentTemp==nil{ 
     _currentTemp=0.0 
    } 
    return _currentTemp 
} 

public 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 
} 

func downloadWeatherDetails(completed: DownloadComplete){ 
    let currentWeatherURL = 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 name = dict["name"]as? String{ 
       self._cityName=name.capitalized 
        print(self._cityName) 
      } 
      if let weather = dict["weather"]as? [Dictionary<String, AnyObject>]{ 
       if let main = weather[0]["main"] as? String{ 
        self._weatherType=main.capitalized 
        print(self._weatherType) 
       } 
      } 
      if let main = dict["main"] as? Dictionary<String, AnyObject>{ 
       if let currentTemp = main["temp"] as? Double{ 
        let kelvintoCelcius = (currentTemp - 273.15) 

        self._currentTemp=kelvintoCelcius 
        print(self._currentTemp) 
       } 
      } 
     } 
    } 
    completed() 
} 
+0

Вы не заходящего любой текст метки. Как вы хотите, чтобы View Controller показывал его, если вы не сказали ему? –

+0

Запрос isync. Почему вы называете 'complete()' no в закрытии Alamofire? – Larme

+0

@JuanCurti Как установить любой текст ярлыка? –

ответ

0

Добавить эту функцию в ViewController.swift:

func downloadWeatherDetails(callback: @escaping (CurrentWeather)->Void){ 
     var currentWeather = CurrentWeather() 
     let currentWeatherURL = 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 name = dict["name"]as? String{ 
        currentWeather._cityName=name.capitalized 
        print(currentWeather._cityName) 
       } 
       if let weather = dict["weather"]as? [Dictionary<String, AnyObject>]{ 
        if let main = weather[0]["main"] as? String{ 
         currentWeather._weatherType=main.capitalized 
         print(currentWeather._weatherType) 
        } 
       } 
       if let main = dict["main"] as? Dictionary<String, AnyObject>{ 
        if let currentTemp = main["temp"] as? Double{ 
         let kelvintoCelcius = (currentTemp - 273.15) 

         currentWeather._currentTemp=kelvintoCelcius 
         print(currentWeather._currentTemp) 
        } 
       callback(currentWeather) 
      } 
     } 
    } 

Заменить viewDidLoad с:

override func viewDidLoad() { 
     super.viewDidLoad() 

     self.downloadWeatherDetails { 
      newWeather in 
      currentWeather = newWeather 
      self.updateMainUI() 
     } 
    } 
+0

СПАСИБО ВАС, что помогло. :) Теперь он показывает обновления на VC. –

+0

@RaunakTrikha Рад, что это вам помогло! Пожалуйста, отметьте мой ответ правильно, если это сработало для вас. –

+0

Готово. Да, это правильно. –