Почему удаленный Firebase элемент отображается в таблице?


#1

Использую TableView для выгрузки данных из Firebase. При переходе на ячейку открывается окно, в котором я удаляю выбранную ячейку. Все ячейки удаляются без проблем, но последняя удаляется в firebase, но почему-то после удаления отображается в TableView. Почему это происходит? И как это исправить?

// КЛАСС TABLEVIEW

var posts = [Post]()

var refNotes: DatabaseReference!

override func viewDidLoad() {
    DatabaseService.shared.postReference.observe(.value, with: { (snapshot) in
        print("\n\n")
        print(snapshot)
        guard let postsSnapshot = PostsSnapshot(with: snapshot) else { return }
        
        self.posts = postsSnapshot.posts
        
        self.myTableView.reloadData()
    })
    
}

// КЛАСС VIEWCONTROLLER

@IBAction func deleteEntity(_ sender: Any) {
    createAlert(title: "Удаление записи", message: "Вы действительно хотите удалить запись?")
}



func createAlert (title:String, message:String)
{
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
    
    alert.addAction(UIAlertAction(title: "Да", style: UIAlertActionStyle.default, handler: { (action) in
        alert.dismiss(animated: true, completion: nil)
        
        let id = self.posts?.postID
        self.deleteNote(id: id!)
    
        self.dismiss(animated: true, completion: nil)
    }))
    
    alert.addAction(UIAlertAction(title: "Нет", style: UIAlertActionStyle.default, handler: { (action) in
        alert.dismiss(animated: true, completion: nil)
        print("Отмена")
    }))
    
    self.present(alert, animated: true, completion: nil)
}

func deleteNote(id: String){
    refNotes = Database.database().reference().child("posts");
    refNotes.child(id).setValue(nil)
}

#2

Оказалось проблема была из-за того, что когда PostsSnapshot возвращал значение nil, то дальнейшие условия не выполнялись.

Исправил вот так и все заработало:

override func viewDidLoad() {
    DatabaseService.shared.postReference.observe(.value, with: { (snapshot) in
        print("\n\n")
        print(snapshot)
        guard let postsSnapshot = PostsSnapshot(with: snapshot) else {
            print("типа return")
            self.posts.removeAll();
            self.myTableView.reloadData()
            return }
        
        self.posts = postsSnapshot.posts
        
        self.myTableView.reloadData()
    })
    
}