This is not an optional-chaining issue *per se*. If you simply write, let a = try? SomeType().doThrow()
// a has type SomeType?? you get a double-optional as well. Are you proposing to change that? Nevin On Fri, Jan 12, 2018 at 12:25 PM, Russ Bishop via swift-evolution < swift-evolution@swift.org> wrote: > Greetings swift-evolution! > > There is currently a disconnect between optional chaining and try? when it > comes to optional flattening: > > > struct SomeType { > func nonThrow() -> SomeType? { return self } > func doThrow() throws -> SomeType? { return self } > func nonOptional() throws -> SomeType { return self } > } > > let w = SomeType().nonThrow()?.nonThrow()?.nonThrow()?.nonThrow() > // w has type SomeType? > > let x = try? SomeType().nonOptional().nonOptional().nonOptional().nonOpti > onal() > // x has type SomeType? > > let y = try! SomeType().doThrow()?.doThrow()?.doThrow()?.doThrow() > // y has type SomeType? > > let z = try? SomeType().doThrow()?.doThrow()?.doThrow()?.doThrow() > // z has type SomeType?? > > > We get a double-optional only when combining try? and optional-chaining. > That is inconvenient and it would be natural to have the compiler do the > flattening here. > > > If anyone is interested in working on the proposal or implementation > please let me know. It would make a nice self-contained task if you're > looking to start contributing. > > > Russ Bishop > Simulator > > > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution > >
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution