[swift-users] @escaping may only be applied to parameters of function type

Michael Ilseman milseman at apple.com
Wed Sep 14 13:26:00 CDT 2016


> On Sep 13, 2016, at 8:16 PM, Michael Ilseman via swift-users <swift-users at swift.org> wrote:
> 
> 
>> On Sep 13, 2016, at 8:14 PM, Rick Mann <rmann at latencyzero.com> wrote:
>> 
>> But the Apple declaration (accessible via Xcode) of the method it's based on looks like this:
>> 
>> open func enumerator(at url: URL,
>>   includingPropertiesForKeys keys: [URLResourceKey]?,
>>   options mask: FileManager.DirectoryEnumerationOptions = [],
>>   errorHandler handler: (@escaping (URL, Error) -> Bool)? = nil)
>>       -> FileManager.DirectoryEnumerator?
>> 
>> handler is optional, but has @escaping. Is this an artifact of how Xcode presents system header files?
>> 
> 
> That’s certainly funky. Might be that or a bug in the AST printer.
> 

Definitely a bug in the AST printer

>> 
>>> On Sep 13, 2016, at 20:11 , Michael Ilseman <milseman at apple.com> wrote:
>>> 
>>> TL;DR: The optional is already escaping, due to the fact that “T?" is sugar for Optional<T>, and the noescape-by-default rule only applies to types in immediate parameter position. Current Swift master has much better diagnostics for this case.
>>> 
>>> There is not currently a general solution involving escapability of closure types used a generic parameters or tuple members, though such a thing would be useful in Swift 4.
>>> 
>>>> On Sep 13, 2016, at 7:42 PM, Shawn Erickson via swift-users <swift-users at swift.org> wrote:
>>>> 
>>>> The following is the earlier thread I was talking about. 
>>>> 
>>>> [swift-users] Swift 3 (Xcode 8 GM) issue with @escaping 
>>>> 
>>>> -Shawn
>>>> 
>>>> On Tue, Sep 13, 2016 at 7:31 PM Shawn Erickson <shawnce at gmail.com> wrote:
>>>> I hit this issue as well. I had an early email on this list regarding do this topic, not in a situation to search for it. It is a short coming in how escaping can be applied to things like optional closures.
>>>> 
>>>> I was in the process of authoring an email for swift evolution about it and haven't yet gotten around to filing a defect about it.
>>>> 
>>>> -Shawn
>>>> On Tue, Sep 13, 2016 at 7:27 PM Rick Mann via swift-users <swift-users at swift.org> wrote:
>>>> I'm trying to write this function. The errorHandler: parameter is modeled after the NSFileManager enumerate() function. If I include the @escaping you see there, I get the error "@escaping may only be applied to parameters of function type".
>>>> 
>>>> The second parameter, iterator:, seems to have no problems with @escaping.
>>>> 
>>>> func
>>>> iterate(directory inURL: URL?,
>>>>       includingPropertiesForKeys: [URLResourceKey]? = nil,
>>>>       options: FileManager.DirectoryEnumerationOptions = [],
>>>>       errorHandler inErrorHandler: (@escaping (URL, Error) -> Bool)? = nil,
>>>>       iterator inIterator: (@escaping (URL) throws -> ())) rethrows
>>>> {
>>>> }
>>>> 
>>>> I'm not sure why I can't apply @escaping here. Can anyone enlighten me? Thank you.
>>>> 
>>>> --
>>>> Rick Mann
>>>> rmann at latencyzero.com
>>>> 
>>>> 
>>>> _______________________________________________
>>>> swift-users mailing list
>>>> swift-users at swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-users
>>>> _______________________________________________
>>>> swift-users mailing list
>>>> swift-users at swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-users
>>> 
>> 
>> 
>> -- 
>> Rick Mann
>> rmann at latencyzero.com
>> 
>> 
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users



More information about the swift-users mailing list