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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution