Я заметил, что в 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
}
}
}