[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