Why in my below code the print statement in the viewWillAppear block after the AlamofireImage have downloaded an image skips the rest of the code in the viewWillAppear block...
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
Alamofire.request("https://example.com/four.png").responseImage { response in
debugPrint(response)
print(response.request as Any)
print(response.response as Any)
debugPrint(response.result)
if let image = response.result.value {
print("image downloaded: \(image)")
self.imageServer.append(image)
print("ImageServer append Successful")
print("The new number of images = \(self.imageServer.count)")
}
}
///////////THESE STATEMENTS ARE BEING SKIPPED/////////////////
print("The new number of images = \(imageServer.count)")
print("Test")
trackedImages = loadedImagesFromDirectoryContents(imageServer)
configuration.trackingImages = trackedImages
configuration.maximumNumberOfTrackedImages = 1
sceneView.session.run(configuration)
}
You could use completionHandler
to solve this. Which will be executed once the function
is complete.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
fetchImage {
print("The new number of images = \(imageServer.count)")
trackedImages = loadedImagesFromDirectoryContents(imageServer)
configuration.trackingImages = trackedImages
configuration.maximumNumberOfTrackedImages = 1
sceneView.session.run(configuration)
}
}
func fetchImage(completion: @escaping ()->()) {
Alamofire.request("https://example.com/four.png").responseImage { response in
debugPrint(response)
print(response.request as Any)
print(response.response as Any)
debugPrint(response.result)
if let image = response.result.value {
print("image downloaded: \(image)")
self.imageServer.append(image)
print("ImageServer append Successful")
print("The new number of images = \(self.imageServer.count)")
}
completion()
}
}