[swift-evolution] Immediately-called closures should be considered @noescape
Al Skipp
al_skipp at fastmail.fm
Tue Dec 15 18:06:08 CST 2015
> On 15 Dec 2015, at 23:16, Brent Royal-Gordon via swift-evolution <swift-evolution at swift.org> wrote:
>
> Here’s a little annoyance I ran across just now:
>
> let sub: CKSubscription = {
> if let ID = self.ID {
> return CKSubscription(recordType: typeName, predicate: predicate, subscriptionID: ID, options: allMutations)
> }
> else {
> return CKSubscription(recordType: typeName, predicate: predicate, options: allMutations)
> }
> }()
>
> This closure obviously never leaves the enclosing function, but Swift doesn’t treat it as if it had been passed to a @noescape function, so I have to say “self.ID” instead of “ID” in the condition. That’s a bit irritating, and I’d like to see it improved.
Would the following be acceptable, or too dense?
let sub = ID.map { id in
CKSubscription(recordType: typeName, predicate: predicate, subscriptionID: id, options: allMutations)
} ?? CKSubscription(recordType: typeName, predicate: predicate, options: allMutations)
Either way, I agree that immediately called closures should be implicitly @noescape.
More information about the swift-evolution
mailing list