gpt4 book ai didi

ios - 无法使用 Swift 从 Firebase 检索数据

转载 作者:行者123 更新时间:2023-11-30 11:55:11 24 4
gpt4 key购买 nike

正如标题所说,我在从 Firebase 检索简单数据时遇到了一个奇怪的问题,但我真的不知道哪里出错了。

这是我的架构:

enter image description here

这是代码:

import Firebase

let DB_BASE = Database.database().reference()

class FirebaseService {

static let instance = FirebaseService()

private var REF_BASE = DB_BASE
private var REF_SERVICE_STATUS = DB_BASE.child("Service_Status")

struct ServiceStatus {
var downloadStatus: Bool
var uploadStatus: Bool
}

func getServiceStatus() -> (ServiceStatus?) {
var serviceStatus: ServiceStatus?

REF_SERVICE_STATUS.observeSingleEvent(of: .value) { (requestSnapshot) in

if let unwrapped = requestSnapshot.children.allObjects as? [DataSnapshot] {
for status in unwrapped {
serviceStatus.downloadStatus = status.childSnapshot(forPath: "Download_Status").value as! Bool
serviceStatus.uploadStatus = status.childSnapshot(forPath: "Upload_Status").value as! Bool
}
// THANKS TO JAY FOR CORRECTION
return sponsorStatus
}
}
}
}

但最后 serviceStatus 为零。有什么建议吗?

最佳答案

我认为您可以稍微简化代码以使其更易于管理。试试这个

let ssRef = DB_BASE.child("Service_Status")
ssRef.observeSingleEvent(of: .value) { snapshot in
let dict = snapshot.value as! [String: Any]
let down = dict["Download_Status"] ?? false
let up = dict["Upload_Status"] ?? false
}

??如果节点为零(即不存在),将为 down 和 up 变量指定默认值 false

哦 - 尝试从 Firebase 异步调用(闭包)返回数据并不会真正起作用(按原样)。

请记住,普通函数通过代码同步传播,然后将值返回给调用函数,然后该调用函数继续执行下一行代码。

一旦您调用 Firebase 函数,在 Firebase 有机会从服务器获取数据并填充返回变量之前,您的代码就会愉快地移至下一行。换句话说 - 不要这样做。

总有其他选择,因此请查看此链接

Run code only after asynchronous function finishes executing

关于ios - 无法使用 Swift 从 Firebase 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47893721/

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