/ / Обробка асинхронного виклику Alamofire - ios, асинхронний, swift3, xcode8, alamofire

Обробка асинхронного виклику Alamofire - ios, асинхронний, swift3, xcode8, alamofire

Я використовую Swift 3 з XCode 8

Я досить новачок у розробці IOS і за допомогою Swift. У мене зараз є проблема, коли деякі необхідні коди не запускаються після успішного завершення асинхронного виклику.

У моєму файлі констант:

typealias DownloadComplete = () -> ()

У моєму файлі WeatherVC.swift:

var currentWeather = CurrentWeather()

override func viewDidLoad() {
super.viewDidLoad()
TableView.delegate = self
TableView.dataSource = self
currentWeather.downloadWeatherDetails{
//setup UI to load downloaded data
print("Done 2")
self.updateMainUI()
}
}

У моєму класі CurrentWeather.swift:

    func downloadWeatherDetails(completed: @escaping DownloadComplete){
//Alamofire download
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 currentTemperature = main["temp"] as? Double {
let kelvinToCelsius = currentTemperature - 273.15
self._currentTemp = kelvinToCelsius
print(self._currentTemp)
}
}
}
print("Done 1")
}
completed() //Make sure to tell download is done

}}

При виконанні коду, "Done 2" друкується спочатку, перед "Done 1", коли я хочу, щоб це було навпаки.

Як це можна виправити? (FYI: Підручник з наступної погоди про Udemy)

Відповіді:

0 для відповіді № 1

Оновлення: Це було просто рух completed всередині responseJSON закриття.