Search code examples
swiftxcodealamofirearkitalamofireimage

Print statement are not getting printed


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

enter image description here


Solution

  • 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()
        }
    }