I'll write up a draft proposal :) I think we have something nice :) *___________________________________*
*James⎥Lead Hustler* *[email protected] <[email protected]>⎥supmenow.com <http://supmenow.com>* *Sup* *Runway East * *10 Finsbury Square* *London* * EC2A 1AF * On 16 August 2016 at 17:54, Xiaodi Wu <[email protected]> wrote: > Nicer still! > > On Tue, Aug 16, 2016 at 11:53 James Campbell <[email protected]> wrote: > >> I guess that would make sense and you could wrap the callback up in a >> anon-closure if the module hadn't adpated the @required property so you get >> both compatibility, safety and clarity. >> >> *___________________________________* >> >> *James⎥Lead Hustler* >> >> *[email protected] <[email protected]>⎥supmenow.com >> <http://supmenow.com>* >> >> *Sup* >> >> *Runway East * >> >> *10 Finsbury Square* >> >> *London* >> >> * EC2A 1AF * >> >> On 16 August 2016 at 17:50, Haravikk <[email protected]> wrote: >> >>> >>> On 16 Aug 2016, at 15:49, Xiaodi Wu via swift-evolution < >>> [email protected]> 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 < >>> [email protected]> 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). >>> >> >>
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
