テキストフィールドからユーザーの電話番号を取得して、verifyPhoneNumberメソッドを使って、以下のような処理をshouldPerformSegueの中で行なっています。

  1. 認証ID（verificationID）を生成できれば、画面遷移を行う
  2. 生成できなければ、エラーメッセージを表示して画面遷移はしない

storyboard上で今のview上のボタンをトリガーにして、次のviewへのsegueを伸ばしています（toNextという名前のSegue）  
verifyPhoneNumberメソッドがvoidなので、仕方なくエラーメッセージを表示するラベルが空欄でないなら画面遷移をしないという処理をverifyPhoneNumberメソッドのすぐ後ろで行なっています。  
printで数字を出力しているのは処理順を確認するためです。

質問内容はshouldPerformSegue内の処理順がおかしいことです。  
テキストフィールドに何も入力しない場合、(1) -> (2-1) -> (3-1)の順に処理されると思いましたが、実際の処理順は(1) -> (3-2)
-> (2-1)でした。  
verifyPhoneNumberメソッドの処理部が後回しにされ、画面遷移の後にエラーメッセージを表示しています。なぜ、このような処理順になるのですか？

```

    override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
        super.shouldPerformSegue(withIdentifier: identifier, sender: sender)
        if (identifier == "toNext"){//segueが"次へ"の時だけ実行する
            if let phonenumber = phonenumberTextField.text{//phonenumberTextFieldがnilでない
                UserDefaults.standard.set(phonenumber, forKey: "phonenumber")
                print("1")
                PhoneAuthProvider.provider().verifyPhoneNumber(DefaultSettings.japan + phonenumber, uiDelegate: nil) { verificationID, error in
                        if let error = error {//画面遷移しない
                            self.errorMessageLabel.text = error.localizedDescription
                            print(error.localizedDescription)
                            print("2-1")
                        }else{//画面遷移する
                            UserDefaults.standard.set(verificationID, forKey: "verificationID")
                            self.errorMessageLabel.text = DefaultSettings.stringBlank
                            print("→→\(verificationID!)")
                            print("2-2")
                        }
                    }
                if errorMessageLabel.text != DefaultSettings.stringBlank{//エラーメッセージがあるなら画面遷移しない。
                    print("3-1")
                    return false
                    }
            }else{//画面遷移しない
                print("5")
                return false
            }
        }
        print("3-2")
        return true
    }
    
```
CC BY-SA 4.0
2023-02-26T11:56:18.950
94014
2023-03-08T02:06:11.120
2023-03-08T02:06:11.120
3060
57286
question
swift firebase swiftui
verifyPhoneNumberメソッドの結果で画面遷移を制御したい