Последовательность обработки командной строки в Swift4 - PullRequest
0 голосов
/ 14 октября 2019

Я новичок в программировании на Swift, и мне нужна помощь, чтобы понять, как Swift обрабатывает командные строки

Я использую Xcode 11.2, Swift4, IOS13 и macOS Catalina

@IBAction func nextStep(_ sender: Any) {
    var urlR : String = ""

    self.buttonNext.isEnabled = false
    self.buttonNext.setTitle("Loading...", for: .normal)

    let storage = Storage.storage().reference()
    let imagesFolder = storage.child("images")
    let imagesFile = imagesFolder.child("\(imageID).jpg")

    print("Step 1 - Start")
    //Recover image
    if let imgRecovered = image.image {
        if let imgData = UIImageJPEGRepresentation(imgRecovered, 0.1) {
            imagesFile.putData(imgData, metadata: nil) { (metaData, error) in
                if error == nil {
                    //Download URL
                   imagesFile.downloadURL { (url, error) in
                        print("Step 2 \(url?.absoluteString) - End of print")
                        self.urlR = url!.absoluteString
                    }
                    // END Download URL

                    print("Step 3 \(self.urlR) - end of print")

                    print("Step 4 - Save Sucess")
                    self.buttonNext.isEnabled = true
                    self.buttonNext.setTitle("Próximo", for: .normal)

                    print("Step 5 - Perform Segue")
                    self.performSegue(withIdentifier: "UserSelectionSegue", sender: self.urlRecebida)


                } else {
                    print("Step 6 - Upload error")
                    self.buttonNext.isEnabled = true
                    self.buttonNext.setTitle("Next", for: .normal)
                }
            }
        }
    }
}

Я добавил сообщение для печати, чтобы понять последовательность командной строки, и я ожидаю, что сообщения будут отображаться в следующем порядке: * Шаг 1 * Шаг 2 * Шаг 3 * Шаг 4 * Шаг 5 * (или Шаг 6 вместовсе вышеперечисленное в случае ошибок).

Но вывод я получаю * Шаг 1 * Шаг 3 * Шаг 4 * Шаг 5 * Шаг 2

Почему шаг 2 самый последнийбыть показанным? Что мне нужно сделать, чтобы обработать его после шага 1?

Спасибо за помощь

1 Ответ

0 голосов
/ 14 октября 2019

Это должно решить это (просто положить все в замыкание)

@IBAction func nextStep(_ sender: Any) {
var urlR : String = ""

self.buttonNext.isEnabled = false
self.buttonNext.setTitle("Loading...", for: .normal)

let storage = Storage.storage().reference()
let imagesFolder = storage.child("images")
let imagesFile = imagesFolder.child("\(imageID).jpg")

print("Step 1 - Start")
//Recover image
if let imgRecovered = image.image {
    if let imgData = UIImageJPEGRepresentation(imgRecovered, 0.1) {
        imagesFile.putData(imgData, metadata: nil) { (metaData, error) in
            if error == nil {
                //Download URL
               imagesFile.downloadURL { (url, error) in
                    print("Step 2 \(url?.absoluteString) - End of print")
                    self.urlR = url!.absoluteString

                // END Download URL

                print("Step 3 \(self.urlR) - end of print")

                print("Step 4 - Save Sucess")
                self.buttonNext.isEnabled = true
                self.buttonNext.setTitle("Próximo", for: .normal)

                print("Step 5 - Perform Segue")
                self.performSegue(withIdentifier: "UserSelectionSegue", sender: self.urlRecebida)


            } else {
                print("Step 6 - Upload error")
                self.buttonNext.isEnabled = true
                self.buttonNext.setTitle("Next", for: .normal)
            }
        }
      }
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...