[swift-evolution] Required Callback

James Campbell james at supmenow.com
Tue Aug 16 09:54:53 CDT 2016

I think as long as the end callback is referenced in some way that would
still be better than what we have now, if you pass it into your own code
but then continue on to not call it then I think it would be fair for the
compiler to let you shoot yourself in the foot in that case.

Calling end more than once is another case which isn't covered by this

so this:

run() { end in


would have an error:


run() end in {

would not since we have at least referenced it.


*James⎥Lead Hustler*

*james at supmenow.com <james at supmenow.com>⎥supmenow.com <http://supmenow.com>*


*Runway East *

*10 Finsbury Square*


* EC2A 1AF *

On 16 August 2016 at 15:49, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:

> I can see the use case, but it'd be annoying (or, impossible) to work
> around if I intend to call `end` by passing it to a helper function in
> another (let's say, precompiled) module. There'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'm totally out of luck. You'd
> need a companion annotation to pass along the requirement to the callee, or
> some sort of force-unrequire, but the latter can't have teeth (i.e. can't
> enforce at runtime) if the closure is escaping.
> On Tue, Aug 16, 2016 at 08:39 James Campbell via swift-evolution <
> swift-evolution at swift.org> wrote:
>> It would be handy if a callback could be marked as required with an
>> optional descriptive message i.e
>> class BackgroundTask {
>>  func run(end: @required("You must call end otherwise iOS will penalise
>> your app for being a bad citizen") () -> Void)
>> }
>> That was the developer can comunicate the bad things that can happen if
>> this callback isn'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.
>> *___________________________________*
>> *James*
>> *james at supmenow.com <james at supmenow.com>⎥supmenow.com
>> <http://supmenow.com>*
>> *Sup*
>> *Runway East *
>> *10 Finsbury Square*
>> *London*
>> * EC2A 1AF *
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160816/115efdc8/attachment.html>

More information about the swift-evolution mailing list