gpt4 book ai didi

swift - 在 Swift 中使用 Firebase 返回语句错误

转载 作者:行者123 更新时间:2023-11-28 12:24:06 25 4
gpt4 key购买 nike

我创建了一个连接到 firebase 的函数,转到特定路径,然后给我值。当我打印(snapshot.value)时,它给了我需要的值。当我调用该函数时,userProfile 为空。我需要 userProfile 返回快照字符串。

 func getUserData(uid: String) -> String{
var _REF_USERNAME = FIRDatabase.database().reference().child("users").child(uid).child("profile").child("username")

var userProfile = String()


_REF_USERNAME.observe(.value, with: {(snapshot) in
print("SNAP: \(snapshot.value)")
userProfile = snapshot.value as! String

})
print(userProfile)
return userProfile
}

最佳答案

swift 3

您在 observe 的回调之外调用 userProfile,因此它将在 observe 函数异步完成之前执行。回调一开始很难理解,但大意是你的代码并不是从上到下顺序运行的,有部分代码是在后台线程中异步运行的。

要访问 userProfile,您必须像这样传入一个回调函数:

func observeUserProfile(completed: @escaping (_ userProfile: String?) -> ()) -> (FIRDatabaseReference, FIRDatabaseHandle) {

let ref = _REF_USERNAME

let handle = ref.observe(.value, with: {(snapshot) in
if !snapshot.exists() { // First check if userProfile exists to be safe
completed(nil)
return
}
userProfile = snapshot.value as! String
// Return userProfile here in the callback
completed(userProfile)
})
// Good practice to return ref and handle to remove the handle later and save memory
return ref, handle

然后在传入回调函数时在外部调用此观察代码:

let ref, handle = observeUserProfile(completed: { (userProfile) in
// Get access to userProfile here
userProfile
}

当您完成此观察者后,通过执行以下操作停止观察以节省内存:

ref.removeObserver(withHandle: handle)

关于swift - 在 Swift 中使用 Firebase 返回语句错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43854811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com