Because it’s being assigned to an ivar, it’s forced to be escaping, or so the compiler tells me.
-Kenny > On Jan 5, 2018, at 12:04 PM, Kevin Nattinger <sw...@nattinger.net> wrote: > > If you remove the @escaping you'll notice it doesn't complain about a > non-escaping closure escaping. > I could be wrong, but I believe that's because using it as an associated > value forces it to escape on the calling side. > > func esc(_ x: @escaping () -> ()) { > x() > } > func noesc(_ x: () -> ()) { > x() > } > > func foo() { > noesc { > print(owner) // compiles > } > esc { > print(owner) // error: requires explicit 'self.'… > } > Optional<()->()>.some { > print(owner) // error: requires explicit 'self.'… > } > } > > >> On Jan 5, 2018, at 11:48 AM, Kenny Leung via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >> >> Hi All. >> >> It seems that if you have an escaping closure argument, you can’t make it >> optional. Am I right? >> init ( >> owner:AnyObject, >> handler:@escaping (HXObserverNotification)->Void >> ) { >> self.owner = owner >> self.handler = handler >> } >> >> You could try this: >> init ( >> owner:AnyObject, >> handler:@escaping ((HXObserverNotification)->Void)? >> ) { >> self.owner = owner >> self.handler = handler >> } >> You get “@escaping attribute only applies to function types” >> >> Or you could try this: >> init ( >> owner:AnyObject, >> handler:(@escaping (HXObserverNotification)->Void)? >> ) { >> self.owner = owner >> self.handler = handler >> } >> You get “@escaping attribute may only be used in function parameter position” >> >> -Kenny >> >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org <mailto:swift-users@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-users >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users