1) Я не могу понять, почему self
не требуется при первом закрытии.Обычно вы получаете ошибку во время компиляции, которая выглядит примерно так: «добавьте self, чтобы сделать семантику захвата явной».myCollectionView
- это IBOutlet, а myItems
- это свойство, оба они строго ссылаются на self
.
2) Правильно ли писать [unowned self]
во втором закрытии?Правильно ли я предполагаю, что, поскольку на myCollectionView
строго указана self
, использование self
в закрытии завершения его метода создаст цикл сохранения, если я не пишу [weak self]
/ [unowned self]
?Второе закрытие требует ссылки self
явно в отличие от первого.
guard let index = myItems.index(of: someItem) else { return }
myCollectionView.performBatchUpdates({
myCollectionView.deleteItems(at: [IndexPath(item: index, section: 0)])
myItems.remove(at: index)
}, completion: {[unowned self] _ in
self.doSomething()
})