Где я могу определить захваченные ссылки для вложенных замыканий в Swift?
Возьмите этот код в качестве примера:
import Foundation
class ExampleDataSource {
var content: Any?
func loadContent() {
ContentLoader.loadContentFromSource() { [weak self] loadedContent in
// completion handler called on background thread
dispatch_async(dispatch_get_main_queue()) { [weak self] in
self?.content = loadedContent
}
}
}
}
class ContentLoader {
class func loadContentFromSource(completion: (loadedContent: Any?) -> Void) {
/*
Load content from web asynchronously,
and call completion handler on background thread.
*/
}
}
В этом примере [weak self]
используется в обоих закрывающих закрытиях, однако компилятор совершенно счастлив, если я опускаю [weak self]
из одного из закрывающих закрытий.
Итак, это оставляет мне 3 варианта определения моего списка захвата:
- определять привязки на каждом вложенном замыкании, ведущем к ссылке
- определять захваты только для первого закрытия.
- Определяет привязки только к самому вложенному закрытию, которое фактически использует ссылку.
Мой вопрос:
Если я знаю, что мой
ExampleDataSource
может бытьnil
в какой-то момент, с чем лучше всего пойти?