<div dir="ltr">I am in the process of updating to Xcode 8 release so I can&#39;t confirm at the moment but I am fairly sure I hit a situation with being asked to implement a func from a protocol that got autocompleted with @escape nested as shown. It would then of course complain that wasn&#39;t valid. If I fixed it I don&#39;t think it was considered being implemented (it could only be an issue as noted in my prior thread related to default implementation not being picked up).<div><br></div><div>I will start a discussion about @escaping on the evolution list (hopefully soon). The main issue I see – beyond quirks like this – is that the proposal stated that closures would become noescape by default. I had existing code that applied @noescape against optional closures as well as tuples with closures, etc. which was happy and appeared to honor @noescape. I had expected closures in all &quot;constructs&quot; to be considered noescape after this change (what I got from reading the proposal) however in some situations they are considered escaping now when in fact in the past @noescape was able to be applied to state otherwise. It is possible that @noescape wasn&#39;t actually doing anything in those cases but it seemed like it was working to me.</div><div><br></div><div>So now I have code that I can&#39;t make work since it was meant to be noescape yet it is now considered escaping implicitly. If I try to fix this code I get complaints about things expected to escape and/or things needed to not escape (hard to explain with examples). I can likely rework the code to get it working again but expect to lose some of the desired implementation.</div><div><br></div><div>-Shawn</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Sep 13, 2016 at 8:16 PM Michael Ilseman &lt;<a href="mailto:milseman@apple.com">milseman@apple.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
&gt; On Sep 13, 2016, at 8:14 PM, Rick Mann &lt;<a href="mailto:rmann@latencyzero.com" target="_blank">rmann@latencyzero.com</a>&gt; wrote:<br>
&gt;<br>
&gt; But the Apple declaration (accessible via Xcode) of the method it&#39;s based on looks like this:<br>
&gt;<br>
&gt; open func enumerator(at url: URL,<br>
&gt;    includingPropertiesForKeys keys: [URLResourceKey]?,<br>
&gt;    options mask: FileManager.DirectoryEnumerationOptions = [],<br>
&gt;    errorHandler handler: (@escaping (URL, Error) -&gt; Bool)? = nil)<br>
&gt;        -&gt; FileManager.DirectoryEnumerator?<br>
&gt;<br>
&gt; handler is optional, but has @escaping. Is this an artifact of how Xcode presents system header files?<br>
&gt;<br>
<br>
That’s certainly funky. Might be that or a bug in the AST printer.<br>
<br>
&gt;<br>
&gt;&gt; On Sep 13, 2016, at 20:11 , Michael Ilseman &lt;<a href="mailto:milseman@apple.com" target="_blank">milseman@apple.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; TL;DR: The optional is already escaping, due to the fact that “T?&quot; is sugar for Optional&lt;T&gt;, and the noescape-by-default rule only applies to types in immediate parameter position. Current Swift master has much better diagnostics for this case.<br>
&gt;&gt;<br>
&gt;&gt; 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.<br>
&gt;&gt;<br>
&gt;&gt;&gt; On Sep 13, 2016, at 7:42 PM, Shawn Erickson via swift-users &lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The following is the earlier thread I was talking about.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; [swift-users] Swift 3 (Xcode 8 GM) issue with @escaping<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; -Shawn<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Tue, Sep 13, 2016 at 7:31 PM Shawn Erickson &lt;<a href="mailto:shawnce@gmail.com" target="_blank">shawnce@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt; 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.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I was in the process of authoring an email for swift evolution about it and haven&#39;t yet gotten around to filing a defect about it.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; -Shawn<br>
&gt;&gt;&gt; On Tue, Sep 13, 2016 at 7:27 PM Rick Mann via swift-users &lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt; I&#39;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 &quot;@escaping may only be applied to parameters of function type&quot;.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The second parameter, iterator:, seems to have no problems with @escaping.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; func<br>
&gt;&gt;&gt; iterate(directory inURL: URL?,<br>
&gt;&gt;&gt;        includingPropertiesForKeys: [URLResourceKey]? = nil,<br>
&gt;&gt;&gt;        options: FileManager.DirectoryEnumerationOptions = [],<br>
&gt;&gt;&gt;        errorHandler inErrorHandler: (@escaping (URL, Error) -&gt; Bool)? = nil,<br>
&gt;&gt;&gt;        iterator inIterator: (@escaping (URL) throws -&gt; ())) rethrows<br>
&gt;&gt;&gt; {<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I&#39;m not sure why I can&#39;t apply @escaping here. Can anyone enlighten me? Thank you.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; Rick Mann<br>
&gt;&gt;&gt; <a href="mailto:rmann@latencyzero.com" target="_blank">rmann@latencyzero.com</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; swift-users mailing list<br>
&gt;&gt;&gt; <a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br>
&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; swift-users mailing list<br>
&gt;&gt;&gt; <a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br>
&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Rick Mann<br>
&gt; <a href="mailto:rmann@latencyzero.com" target="_blank">rmann@latencyzero.com</a><br>
&gt;<br>
&gt;<br>
<br>
</blockquote></div>