Документация Apple Swift гласит:
Маркировка замыкания с помощью @escaping означает, что вы должны явно ссылаться на себя внутри замыкания.
var completionHandlers: [() -> Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
completionHandlers.append(completionHandler)
}
func someFunctionWithNonescapingClosure(closure: () -> Void) {
closure()
}
class SomeClass {
var x = 10
func doSomething() {
someFunctionWithEscapingClosure { self.x = 100 }
someFunctionWithNonescapingClosure { x = 200 }
}
}
Но яне в состоянии понять причину этого?
В одной из своих лекций в Стэнфорде (я точно не помню, какая из них) Пол Хегарти сказал, что Свифт указывает на возможность цикла удержания, заставляя вас написать «я».,Так существует ли возможность цикла хранения при использовании экранирующих замыканий?Или есть какая-то другая причина, почему мы должны явно ссылаться на себя в замыканиях, помеченных как экранирующие?
И почему в другом случае (не экранирующие замыкания) нет возможности цикла удержания?
Заранее спасибо.