[swift-evolution] Required Callback

Xiaodi Wu xiaodi.wu at gmail.com
Tue Aug 16 11:52:50 CDT 2016


Nice! Still need an escape hatch for when that other function isn't
annotated though, for those situations when you *know* it's always going to
be called and that you should never call it twice.
On Tue, Aug 16, 2016 at 11:50 Haravikk <swift-evolution at haravikk.me> wrote:

>
> On 16 Aug 2016, at 15:49, Xiaodi Wu via swift-evolution <
> swift-evolution at swift.org> 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.
>>
>
> 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).
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160816/2293b643/attachment.html>


More information about the swift-evolution mailing list