gpt4 book ai didi

swift - Firebase 不会将我的值发送到我的变量中

转载 作者:行者123 更新时间:2023-11-28 05:47:56 24 4
gpt4 key购买 nike

我有一个代码,通常应该从 Firebase 返回给我一个值。

我的 Firebase 结构是:

Experience{
UserId{
LDG_DAY: "4"
LDG_NIGHT: "0"
APCH_IFR: "0"
}
}

我的代码是:

func getUserExp(){
let ref = Database.database().reference()
let userID = Auth.auth().currentUser?.uid
let Date = self.flightDate.text
ref.child("Experience")/*.child(userID!)*/.observeSingleEvent(of: .value) {(snapshot) in
if snapshot.hasChild(userID!){
let value = snapshot.value as? NSDictionary


let ldg_day = value?["LDG_DAY"] as? String ?? "123"
let ldg_night = value?["LDG_NIGHT"] as? String ?? "0"
let apch_ifr = value?["APCH_IFR"] as? String ?? "0"


self.intLdgDay = Int(ldg_day)!
self.intLdgNight = Int(ldg_night)!
self.intApchIfr = Int(apch_ifr)!

print("string = \(ldg_day) int = \(self.intLdgDay)")



}
}
}

现在代码没有像我希望的那样工作...事实上我的代码返回基本的 as?字符串 ?? “123” 值,但 snapshot.value 从 firebase 获得了很好的值(value)......怎么了 ?我将此代码用于我的应用程序的许多其他部分并且没有问题吗?

谢谢你的帮助

最佳答案

我相信您想在尝试读取子数据之前确保节点存在。

注意:

我看到读取路径已将 uid 注释掉,因此不清楚您是否打算读取单个用户(留在 uid 中)或者您是否真的想一次加载每个用户(数千个)。此答案假定您打算只读取该特定用户节点。如果您打算一次读取所有用户节点,请参阅@Callam 的回答。

您现在拥有的代码正在使用 snapshot.hasChild,它会在节点内查看子节点、用户 uid 是否存在,如果不存在,那么代码将始终失败。

if snapshot.hasChild(userID!)

我认为您想做的是在读取之前使用 snapshot.exists 确保它是一个有效节点。这是代码:

let experienceRef = self.ref.child("Experience")
let usersExpRef = experienceRef.child(uid)
usersExpRef.observeSingleEvent(of: .value) { snapshot in
if snapshot.exists() {
let value = snapshot.value as! [String: Any]
let ldg_day = value["LDG_DAY"] as? String ?? "123"
print("string = \(ldg_day)")
} else {
print("the \(uid) node does not exist")
}
}

我还建议在尝试使用它们之前安全地解包选项,因为它们可能为 nil,这会使您的代码崩溃。

guard let thisUser = Auth.auth().currentUser else { return }
let uid = thisUser.uid

请注意,我还将旧的 objc NSDictionary 替换为它的 Swifty 对应物 [String: Any]

关于swift - Firebase 不会将我的值发送到我的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53971727/

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