<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:#000000">I guess that would make sense and you could wrap the callback up in a anon-closure if the module hadn&#39;t adpated the @required property so you get both compatibility, safety and clarity.</div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">







<p><b><font color="#cc0000">___________________________________</font></b></p><p><b>James⎥Lead Hustler</b></p><p><b><font color="#cc0000"><a href="mailto:james@supmenow.com" target="_blank">james@supmenow.com</a>⎥<a href="http://supmenow.com" target="_blank">supmenow.com</a></font></b></p><p><b><font size="2">Sup</font></b></p><p><b><font size="2">Runway East
</font></b></p><p><b><font size="2">10 Finsbury Square</font></b></p><p><b><font size="2">London</font></b></p><p><b><font size="2">
EC2A 1AF </font></b></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On 16 August 2016 at 17:50, Haravikk <span dir="ltr">&lt;<a href="mailto:swift-evolution@haravikk.me" target="_blank">swift-evolution@haravikk.me</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span class=""><br><div><blockquote type="cite"><div>On 16 Aug 2016, at 15:49, Xiaodi Wu via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div>I can see the use case, but it&#39;d be annoying (or, impossible) to work around if I intend to call `end` by passing it to a helper function in another (let&#39;s say, precompiled) module. There&#39;s no way for the compiler to inspect that `end` is always called by that other module, and if calling `end` twice causes bad things to happen, I&#39;m totally out of luck. You&#39;d need a companion annotation to pass along the requirement to the callee, or some sort of force-unrequire, but the latter can&#39;t have teeth (i.e. can&#39;t enforce at runtime) if the closure is escaping.<br><div class="gmail_quote"><div dir="ltr">On Tue, Aug 16, 2016 at 08:39 James Campbell via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">It would be handy if a callback could be marked as required with an optional descriptive message i.e</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">class BackgroundTask {</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"> func run(end: @required(&quot;You must call end otherwise iOS will penalise your app for being a bad citizen&quot;) () -&gt; Void) </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">}</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">That was the developer can comunicate the bad things that can happen if this callback isn&#39;t called such as iOS peanlizing them for not ending a background task or perhaps memory leaks caused by clean up code unable to be triggered.</div></div></blockquote></div></div></blockquote><br></div></span><div>Could this not just behave in the same way as @noescape, in which case you can pass the closure on to other functions so long as they also have the @noescape attribute? In this case passing it as a parameter to another method with the @required attribute would be equivalent to calling it directly (since you know the other method must eventually call it).</div></div></blockquote></div><br></div>