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”
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.
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”
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 <swift@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.
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”
At the moment an optional closure is considered escaping so you don’t have
to state it using @escaping and as you see you actually can’t. A bug or two
exists against Swift related this and I don’t know their current state.
If after removing @escaping things still fail to compile please post a code
example.
-Shawn
···
On Fri, Jan 5, 2018 at 1:17 PM Kenny Leung via swift-users < swift-users@swift.org> wrote:
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 <swift@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.
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”
On Jan 5, 2018, at 1:24 PM, Shawn Erickson <shawnce@gmail.com> wrote:
At the moment an optional closure is considered escaping so you don’t have to state it using @escaping and as you see you actually can’t. A bug or two exists against Swift related this and I don’t know their current state.
If after removing @escaping things still fail to compile please post a code example.
-Shawn
On Fri, Jan 5, 2018 at 1:17 PM Kenny Leung via swift-users <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
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 <swift@nattinger.net <mailto:swift@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.
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”