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