Ios 赢得的字符串值';尽管有明确的声明,但Swift不会改变
我正在制作一个应用程序,其中我必须返回一个字符串,表示存在对我的firebase实时数据库的某个引用(出于其他原因,我没有使用Bool)。尽管直接在上面和下面执行print命令,但当我打印函数时,字符串的值不会改变,并打印其默认值“Unchanged” 我的代码:Ios 赢得的字符串值';尽管有明确的声明,但Swift不会改变,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我正在制作一个应用程序,其中我必须返回一个字符串,表示存在对我的firebase实时数据库的某个引用(出于其他原因,我没有使用Bool)。尽管直接在上面和下面执行print命令,但当我打印函数时,字符串的值不会改变,并打印其默认值“Unchanged” 我的代码: func checkIfMovieHasAlreadyBeenShown(movieID: String) -> String { var hasItBeenSeen = "Unchanged" let uid
func checkIfMovieHasAlreadyBeenShown(movieID: String) -> String {
var hasItBeenSeen = "Unchanged"
let uid = Auth.auth().currentUser?.uid
let ref = Database.database().reference()
ref.child("Seen Movies").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild(movieID){
print("The Result:")
self.changeStringHasItBeenSeen(YNString: "yes")
print("YES")
}
else {
print("The Result:")
self.changeStringHasItBeenSeen(YNString: "no")
print("NO")
}
})
return hasItBeenSeen
}
印于此:
print(checkIfMovieHasAlreadyBeenShown(movieID: "39"))
print(checkIfMovieHasAlreadyBeenShown(movieID: "38"))
observeSingleEvent
在闭包中调用。返回hasitbeensen
行将不受闭包中任何内容的影响,因为它将首先返回
想象一下:你告诉你的朋友去买些苹果。他还没走,你就向他要价。当然,他不会知道,因为他还没有去买苹果
在调用闭包之后(或者在购买苹果之后),您需要某种方式来执行某些操作。通常这可以通过一个完成处理程序来完成,在该处理程序中,您将闭包传递到您的checkifmoviehasareadybeenshow
函数中,例如“在购买苹果后执行此操作”
然后您可以这样调用您的函数:
checkifmoviehasareadybeenshow(movieID:“39”,completion:{seen in print(seen)})
@schemetral的答案确实是问题:当运行return hasItBeenSeen
时,值还没有加载。另见:,,喜欢苹果的比喻。