我都是新來的Firebase,並將它與Swift一起使用。我正在嘗試瞭解如何使用Firebase數據庫。與Firebase一起創建DataMan
通常當在Swift中處理數據時,我創建了一個DataManager,它處理data/database/api的所有工作,以便代碼被隔離並且不會在整個應用程序中混亂。
在TableViewController加載數據以後我可以只是像做
self.items = DataManager.shared.getItems()
在以下不同的火力地堡的教程,我發現,在所有實例的所有數據處理都在ViewControllers本身造成。 For example this tutorial在TableViewController他們會碰到這樣的:
let ref = FIRDatabase.database().reference(withPath: "items")
override func viewDidLoad() {
ref.observe(.value, with: { snapshot in
var newItems: [Item] = []
for item in snapshot.children {
let newItem = Item(snapshot: item as! FIRDataSnapshot)
newItems.append(newItem)
}
self.items = newItems
self.tableView.reloadData()
})
}
也許他們正在做這種方式,因爲這僅僅是一個例子,它更容易解釋。但我認爲這種方式會讓應用程序混亂,我寧願將這些東西移到DataManager中。
我一直在試圖理解如何以一種好的方式做到這一點,但我無法弄清楚。如何確保觀察者被移除等?你會怎麼做?有創建這種結構的好例子嗎?或者,這不是Firebase的工作方式嗎?
太好了!謝謝!但是,我什麼時候可以調用ref.removeObserverWithHandle(handle)來確保偵聽器被移除?還將引用在DataManager中,它將被幾個視圖控制器使用嗎? – Martin
@Martin我從來沒有這樣做過。但我很確定,你可以在數據管理器中刪除觀察者。一切都應該沒問題。 :)如果它幫助標記爲答案請致電 –
謝謝!但是什麼時候我應該啓動參考,何時應該將其刪除?由於ref現在在DataManager中,它可以同時在應用程序中的多個位置使用? – Martin