У меня был опыт использования MVVM без реактивщины. Немного длиннее код, но в целом нормально. Большая часть реактивщины избыточна, если вам нужен только байндинг.
Что касается конкретно этого кода, то все таки в парадигме MVVM не надо связывать действие пользователя с результатом. То есть у вас есть отдельно метод
deleteFood(IndexPath)
и отдельно
var animatableChanges: ((OldData, NewData) -> Void)?
куда View может засунуть свой байндинг. Такой подход позволяет ViewModel обновлять вьюху тогда, когда она посчитает нужным, а с другой стороны держать код всех байндингов в одном месте (к примеру, в специальном методе, вызываемом из
viewDidLoad
).