【发布时间】:2018-03-25 02:37:10
【问题描述】:
我是 iOS 开发的新手,我正在学习有关将数据读写到 firebase 的教程。我想从 Firebase 检索数据并用它填充 tableView。
在观察引用时使用 .value 数据事件类型从实时数据库中检索数据时,我感到很困惑。这是简化的代码
class Story
{
var text = ""
var numberOfLikes = 0
var numberOfAngry = 0
let ref: FIRDatabaseReference!
init(snapshot: FIRDataSnapshot)
{
ref = snapshot.ref
if let value = snapshot.value as? [String : Any] {
text = value["text"] as! String
numberOfLikes = value["numberOfLikes"] as! Int
numberOfAngry = value["numberOfAngry"] as! Int
} else {
numberOfAngry = 0
numberOfLikes = 0
}
}
}
class StoriesTableViewController: UITableViewController
{
// MARK: - Properties
var stories = [Story]()
private let storiesRef = FIRDatabase.database().reference().child("stories")
@IBOutlet weak var composeBarButtonItem: UIBarButtonItem!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
storiesRef.observe(.value, with: { snapshot in
self.stories.removeAll()
for child in snapshot.children {
let story = Story(snapshot: child as! FIRDataSnapshot)
self.stories.append(story)
}
self.tableView.reloadData()
})
}
我的问题是……
我看过几乎相同的其他教程,只是编写简单的数据并用它填充表格视图,但其他教程只是使用 .childadded 作为事件类型。我不明白为什么在本教程中使用 .value 事件类型?因为它看起来更复杂。
为什么我们必须循环 snapshot.children ?当我们创建数据库引用时,snapshot.children 与 child 一样吗?
实际上,我对术语快照 (FIRDataSnapshot) 和参考 (FIRDatabasereference) 不太满意。有没有关于这个词的文章或视频解释?
很抱歉,如果我问了太多问题并且看起来很愚蠢,只是一个想要真正掌握此代码的新手。提前致谢
【问题讨论】:
标签: ios swift firebase firebase-realtime-database