我正在尝试创建一个算法,该算法创建 12 个结构对象(问题)并将它们放入一个数组(问题)中。但是,它似乎不起作用,因为对象是在 Firebase 中的数据能够修改它们之前创建的。我试图使它们异步,但我在网上发现没有任何效果。提前致谢。
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("NumberOfQuestions").observeSingleEvent(of: .value, with: { snapshot in
while self.questions.count < 12{
var question = questionMGR() //questionMGR is the name of my struct
let questionNumber = String(Int(arc4random_uniform(snapshot.value as! UInt32) + 1))
databaseRef.child("questions").child("questionNumber: " + questionNum).child("title").observeSingleEvent(of: .value, with: { snapshot in
print(snapshot.value ?? "")
question.title = (snapshot.value as? String)!
databaseRef.child("questions").child("questionNumber: " + questionNum).child("description").observeSingleEvent(of: .value, with: { snapshot in
print(snapshot.value ?? "")
question.desc = (snapshot.value as? String)!
})
})
self.questions.append(question)
}
})
发生这种情况时,解决方案通常是移动操作inside回调:
databaseRef.child("questions").child("questionNumber: " + questionNum).child("title").observeSingleEvent(of: .value, with: { snapshot in
print(snapshot.value ?? "")
question.title = (snapshot.value as? String)!
databaseRef.child("questions").childSnapshot(forPath: "questionNumber: " + questionNum).childSnapshot(forPath: "description").observeSingleEvent(of: .value, with: { snapshot in
print(snapshot.value ?? "")
question.desc = (snapshot.value as? String)!
self.questions.append(question)
})
})
但在这种情况下,我想知道为什么你不简单地一次性加载整个问题:
FIRDatabaseReference qref = databaseRef.child("questions").child("questionNumber: " + questionNum)
qref.observeSingleEvent(of: .value, with: { snapshot in
var question = questionMGR()
question.title = (snapshot.childSnapshot(forPath: "title").value as? String)!
question.desc = (snapshot.childSnapshot(forPath: "description").value as? String)!
self.questions.append(question)
})
我考虑两次单独调用标题和描述的唯一原因是,如果您的问题包含更多您不需要的数据。但如果是这种情况,我会重新构建您的 JSON,将标题和描述分离到一个单独的顶级列表中。
在 NoSQL 中,将数据建模为与屏幕上显示的内容非常相似通常是一件好事 (tm)。因此,如果您有每个问题的标题和描述的列表,您应该考虑精确存储:每个问题的标题和描述的列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)