我正在尝试在我的应用中编写通知系统。为了简单地解释我的问题,让我们说当用户喜欢图片时,Firebase中有一个新的通知子项。如果同一个用户不同于图片,则删除该孩子。
数据库结构如下:
|
| Notification
| |_UserID (the one who received the notification)
| | |__NotificationID
| | | |_from: UserID (the one who sent the notification)
| | | |_notViewed: false
| | | |_objectId: "-L5-C7nnEji4tNeJp3Ca"
| | | |_timestamp: 1518286167
| | | |_type: "like"
我的想法是观察根Notification / CurrentUser中的所有通知:
func observeNotification(withId id: String, completion: @escaping (Notificationm) -> Void) {
REF_NOTIFICATION.child(id).observe(.childAdded) { (snapshot) in
if let dict = snapshot.value as? [String: Any] {
let newNotif = Notificationm.transformNotification(dict: dict, key: snapshot.key)
completion(newNotif)
}
}
}
然后,在ViewController中:
func loadNotifications(){
Api.Notification.observeNotification(withId: currentUser.uid) { (notification) in
print(notification.id)
}
}
我的问题很简单,但我真的不明白原因:
如果使用复习功能调用函数loadNotifications(),一切都还可以
如果数据库发生变化(例如,有新通知),一切都会成倍增加!同样的通知可以打印2,3,4等等!我真的不明白为什么。
如果我使用其他帐户,喜欢和不同于我的照片。我可以看到:
它可以影响其他通知,可以显示2到4次。
我是斯威夫特的新手,真的输了。