I meant to state otherwise I have to fallback on IUO to make it work
cleanly...
public func finish() throws -> ([String:String],InputStream) {
var formHeaders: [String:String]!
var formStream: InputStream!
try finish({ (fh, fs, _) in
formHeaders = fh
formStream = fs
})
return (formHeaders, formStream)
}
On Thu, Feb 2, 2017 at 12:33 PM Shawn Erickson <[email protected]> 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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users