I agree that this behavior is annoying. However, wouldn’t it be source-breaking to change this now?
-BJ > On Jan 12, 2018, at 10:25 AM, 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().nonOptional() > // 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