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