Я використовую 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
закриття.