[swift-evolution] Required Callback

Xiaodi Wu xiaodi.wu at gmail.com
Tue Aug 16 09:49:34 CDT 2016


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/420c62de/attachment.html>


More information about the swift-evolution mailing list