I've started to explore Smart KeyPaths in the latest Swift Development Snapshot with regard to lenses and have been pleasantly surprised: Swift has one of the better out-of-box optics stories I've come across!
In (brief) use I've come across a few gaps that I was hoping we could fill in.
## Tuple KeyPaths
I hoped these would work already, but I hit a compiler crash: [SR-4888] Crash: Tuple KeyPaths · Issue #47465 · apple/swift · GitHub
struct Location {
let coords: (lat: Double, lng: Double)
}
\Location.coords.lat
\Location.coords.0
## Enumeration KeyPaths
I tried to find discussion around enum KeyPaths but couldn't find any.
struct User {
let name: String
}
enum Result<Success, Failure: Error> {
case success(Success)
case failure(Failure)
}
\Result<User, Error>.success?.name
Enumeration cases with multiple values could use tuple-style matching.
enum Color {
case gray(Double, a: Double)
case rgba(r: Double, g: Double, b: Double, a: Double)
// ...
}
\Color.gray.0?.description
\Color.rgba.r?.description
## Other Ideas
The above are just quick ideas that would partially cover more use cases of lenses and prisms, but I'd love to explore other optics, as well. E.g, traversals: `\User.friends[..].friends` to return a user's friends' friends.
···
-
Stephen