gpt4 book ai didi

swift - 从 firebase 数据库获取用户数据时无法更新值

转载 作者:行者123 更新时间:2023-11-28 05:39:49 25 4
gpt4 key购买 nike

我可以从 firebase 中获取用户数据,但我无法将用户数据输入到全局变量中。

        Database.database().reference().child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let username = value?["username"] as? String ?? ""
let userDigit = value?["lastDigit"] as? String ?? ""
let userDate = value?["babyDate"] as? String ?? ""

print(username)
print(userDigit)
print(userDate)


self.user.userName = username
self.user.userDigit = userDigit
self.user.userDate = userDate


}) { (error) in
print(error.localizedDescription)
}

print(self.user.userName)
print(self.user.userDigit)
print(self.user.userDate)

从上面的代码中,我可以看到用户名、userDigit、userDate,但是,将数据输入到包含 3 个字符串变量的用户类后,我无法打印用户类值。

具体来说,
打印(self.user.userName)此代码返回零。

如何输入数据?

最佳答案

self.user.userName 的值为 nil 因为您在观察者闭包之外调用它。
在闭包中分配后打印一个值并不能保证它在之后立即可用。
因为 observeSingleEvent 的闭包在从 firebase 获取数据后被调用。
您应该修改您的逻辑,并在成功从 firebase 获取数据后尝试访问 user 的值。
下面是一个示例代码,可以帮助您理解这个概念:

func getUser(with userID: String, completion: @escaping ((_ user: User) -> Void)) {
Database.database().reference().child("users").child(userID).observeSingleEvent(of: .value) { (snapshot) in
// Get user value
let value = snapshot.value as? [String: Any]
let username = value?["username"] as? String ?? ""
let userDigit = value?["lastDigit"] as? String ?? ""
let userDate = value?["babyDate"] as? String ?? ""

var user = User()
user.userName = username
user.userDigit = userDigit
user.userDate = userDate

DispatchQueue.main.async {
completion(user)
}
}
}

在上述方法中,我们从 firebase 获取数据,并在数据可用后将其返回到我们自己的闭包中。然后你像这样调用上面的函数:

self.getUser(with: userID!) { (user) in
// the user object inside the closure will be available after fetching data from firebase
// the user object can even be assigned to a global property
self.globalUser = user
print(self.globalUser.userName)
print(self.globalUser.userDigit)
print(self.globalUser.userDate)
}

希望对你有帮助

关于swift - 从 firebase 数据库获取用户数据时无法更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57235072/

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