Nice! Still need an escape hatch for when that other function isn&#39;t annotated though, for those situations when you *know* it&#39;s always going to be called and that you should never call it twice.<br><div class="gmail_quote"><div dir="ltr">On Tue, Aug 16, 2016 at 11:50 Haravikk &lt;<a href="mailto:swift-evolution@haravikk.me">swift-evolution@haravikk.me</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><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></div><div style="word-wrap:break-word"><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>