gpt4 book ai didi

swift - Firebase 快照不显示数据

转载 作者:行者123 更新时间:2023-11-30 10:41:23 26 4
gpt4 key购买 nike

基本上一切正常,除了 showChild 函数由于保护 catData = Category(snapshot: catInfo) 而返回completion([])。我想知道为什么守卫让返回完成。当我调试时,catInfo 确实有 1 个值,如我的数据库图片所示,我想将 catData.main 附加到“cats”。下面是服务方法和类别模型的代码。

Firebase Database

static func showChild(completion: @escaping ([String]) -> Void) {
let ref = Database.database().reference().child("category").child(User.current.uid)
ref.observeSingleEvent(of: .value, with: { (snapshot) in
guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else {
return completion([])
}

var cats = [String]()

for catInfo in snapshot {
guard let catData = Category(snapshot: catInfo) else {
return completion([])
}
cats += catData.main
}
completion(cats)
})
}

import Foundation
import FirebaseDatabase.FIRDataSnapshot

class Category {

var key: String?
let main: [String]

init?(snapshot: DataSnapshot) {
guard !snapshot.key.isEmpty else {return nil}
if let dict = snapshot.value as? [String : Any]{

let main = dict["main"] as? [String]

self.key = snapshot.key
self.main = main ?? [""]
}
else{
return nil
}
}
}

最佳答案

这个问题非常简单。

虽然您的快照至少包含一个数据节点,但它不是 Category init 方法可以理解的格式。您正在迭代它的子节点,在您的屏幕截图中,只有一个,其键为“main”

您正在观察此节点

fb_root
category
2ayHe...

然后你迭代它的子节点,这将是

main
0: Performance

所以键是“main”,其值是“0:Performance”

但是您的 Category 类正在寻找“main”的子节点

let main = dict["main"] as? [String]

没有足够的信息来理解结构的其余部分将包含什么内容,因此我无法告诉您如何纠正它,但至少您知道问题是什么。

澄清一下,这一行

if let dict = snapshot.value as? [String : Any]

将使 dict = [0: "性能]

关于swift - Firebase 快照不显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56719054/

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