[swift-users] Can't make an escaping closure argument optional?
Kenny Leung
kenny_leung at pobox.com
Fri Jan 5 15:28:53 CST 2018
You are correct! Thanks!
-Kenny
> On Jan 5, 2018, at 1:24 PM, Shawn Erickson <shawnce at 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 at swift.org <mailto:swift-users at 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 at nattinger.net <mailto:swift at 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 at swift.org <mailto:swift-users at 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 at swift.org <mailto:swift-users at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
>>
>
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org <mailto:swift-users at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20180105/4550580d/attachment.html>
More information about the swift-users
mailing list