Почему замыкания требуют явного `self`, когда все они по умолчанию не экранированы в Swift 3?
Я заметил, что в Swift 2.2 замыкания помечены как не экранирующие с@noescape
не требует явногоself
, В Swift 3 все замыкания не являются экранированными по умолчанию и теперь требуют, чтобы они были помечены@escaping
если вы хотите, чтобы они смогли сбежать.
Учитывая, что все замыкания в Swift 3 по умолчанию не являются экранированными, почему они требуют явногоself
?
final class SomeViewController: NSViewController {
var someClosure: () -> () = { _ in }
override func viewDidLoad() {
super.viewDidLoad()
someClosure = {
view.layer = CALayer() // ERROR: Implicit use of `self` in closure; use `self.` to make capture semantics explicit
}
}
}