Я не думаю, что вам нужно capture list
в этой ситуации.
Время, когда используется список захвата, - это когда мы создаем сильный ссылочный цикл, что означает, что эти объекты указывают друг на друга иARC считает, что они все еще используются, поскольку счет не 0
.
В ситуации editActionsForRowAt
замыкание не указывает ни на что другое, только на блок кода, который должен быть выполнен.
При нажатии одной из кнопок действий выполняется сохраненный блок обработчика.с объектом действия.
Подробнее о editActionsForRowAt
здесь
В заключение безопасно удалить [unowned self]
, поскольку вы не используетеaction
, вы можете заменить его на _
, чтобы сделать его чище.И вам также не нужно звонить tableView.reloadData()
здесь.
let delete = UITableViewRowAction(style: .destructive, title: "Delete") {(_, indexPath) in
self.habitsManager.remove(at: indexPath.row)
self.adjustForRowCount()
tableView.deleteRows(at: [indexPath], with: .fade)
}
Кстати, в документе Swift есть несколько замечательных примеров того, как работает ARC и когда использовать список захвата.Вы можете проверить это также. Link