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> 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 > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users