В моем приложении ячейка удаляется с collectionView после долгого нажатия на нее во вью контроллере. Код удаления написан во вью модели и выглядит вот так:
func deleteFood(forIndexPath indexPath: IndexPath, completion: @escaping ([FoodBySections], [FoodBySections]) -> ()) {
let objectToDeleteName = self.foodBySections[indexPath.section][indexPath.row].name!
let oldData = foodBySections
CoreDataHelper.sharedInstance.deleteFoodFromFridge(foodName: objectToDeleteName)
foods = CoreDataHelper.sharedInstance.fetchFoods()
//newData
foodBySections = FoodBySections.split(foods: foods!)
completion(oldData, foodBySections)
}
Код контроллера выглядит так:
@objc func deleteFood(gesture: UILongPressGestureRecognizer!) {
if gesture.state != .ended {
return
}
let point = gesture.location(in: self.collectionView)
if let indexPath = self.collectionView?.indexPathForItem(at: point) {
self.foodViewModel?.deleteFood(forIndexPath: indexPath, completion: { [weak self] (oldData, newData) in
guard let self = self else { return }
self.collectionView.animateItemAndSectionChanges(oldData: oldData, newData: newData)
})
}
}
Таким образом, мы получили необходимые данные для обновления collectionView через замыкания. Является ли данный подход в MVVM корректным? Или в любом случае всегда нужно использовать реактивщину?