私はユーザ名を取得し、関連するパスワードを見つけるためのログインページのコードを書いています。一時的に私は "電子メールがユーザ名の下に存在すれば、完全なセグー"と言いました。しかし、私が電子メールをチェックするgetEmailメソッドを呼び出すと、完全な電子メールアドレスで正しく終了しないようです。 print(email)は正しいメールアドレスを返すので、私はそれを取得したことを知っており、正しいものです。私は決して方法のそれを作るように見えることはありません。本当にここにこだわった! Heres私のコード:Firebase observeメソッドが返されずに続行しない
func getEmail(name: String) -> String{
var email = ""
ref = Database.database().reference()
self.ref.child("Users").child(name).observeSingleEvent(of: .value, with: { (snapshot) in
if let user = snapshot.value as? [String:Any] {
print("email retrieved");
email = user["email"] as! String;
print(email)
return;
}
else{
print("email could not be retrieved from the user.");
}
}){ (error) in
print("Could not retrieve object from database because: ");
print((Any).self);
}
return email;
}
func validate(){
if(Username.text == ""){
EmptyStringAlert();
}
let email = getEmail(name: Username.text!);
print(email)
if(email == ""){
return;
}
performSegue(withIdentifier: "LoginSuccess", sender: nil)
}
FireBaseのWebCallが非同期であるため、次のように試してください。 'return email;の直前に' print( "返信する電子メール:\(email)" "を実行すると、' print( "取り出された電子メール");がAFTERと呼ばれます。 + Async + Closure "を参考にしてください。 – Larme