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 <shaw...@gmail.com> 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@swift.org https://lists.swift.org/mailman/listinfo/swift-users