[swift-users] Non-escaping closure not allowed to do let initialization?

Jordan Rose jordan_rose at apple.com
Thu Feb 2 15:32:53 CST 2017


Hi, Shawn. "Non-escaping" doesn't mean "guaranteed to be called at least once", nor "guaranteed to be called at most once". You'd need both of those conditions to make this okay.

There's been some discussion on the swift-evolution list about adding such an annotation, but nothing's been seriously proposed yet. As an additive change to Swift, it isn't something that needs to happen now, just an improvement we could make.

Jordan


> On Feb 2, 2017, at 12:33, Shawn Erickson via swift-users <swift-users at swift.org> wrote:
> 
> I attempted the following code which involves passing a closure – one that doesn't escape obviously – but the compiler complains that I need to make formHeaders and formStream vars.
> 
>     public func finish() throws -> ([String:String],InputStream) {
>         let formHeaders: [String:String]
>         let formStream: InputStream
>         try finish({ (fh, fs, _) in
>             formHeaders = fh
>             formStream = fs
>         })
>         return (formHeaders, formStream)
>     }
> 
> If I have code like this however the use of let is ok.
> 
>     public func finish() throws -> ([String:String],InputStream) {
>         let formHeaders: [String:String]
>         let formStream: InputStream
>         if self.finalized.get() {
>             formHeaders = ["foo":"bar"]
>             //formStream = ...
>         }
>         else {
>             formHeaders = [:]
>             //formStream = ...
>             // or throw something here
>         }
>         return (formHeaders, formStream)
>     }
> 
> If the closure is non-escaping and the code as structured the compiler should be able to reason about the initialization correctness of those lets...? ...or am I missing something?
> 
> -Shawn
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170202/50095361/attachment.html>


More information about the swift-users mailing list