[swift-evolution] [Pitch] UnsafePointer.advanced(to:)
Brent Royal-Gordon
brent at architechies.com
Tue Jun 6 13:33:31 CDT 2017
> On Jun 6, 2017, at 9:06 AM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
>
> Why would this be an extension on UnsafePointer and not KeyPath?
1. I can't come up with a name as good as `advanced(to:)` that would be attached to the key path. I use `advance(_:)` in the other two reasons below, but I don't think it's nearly as clear about what it's doing to the pointer.
2. Passing the pointer as the parameter would encourage use of `&`, which would be invalid.
(\CGRect.origin.y).advance(&myRect) // Pointer might be to a temporary
(&myRect).advanced(to: \.origin.y) // Rejected during compilation because & is not allowed there
3. Passing the key path as a parameter improves the code's appearance when you specify the key path in the expression.
myRectPtr.advanced(to: \.origin.y)
(\CGRect.origin.y).advance(myRectPtr) // Requires explicit type name and extra parentheses
--
Brent Royal-Gordon
Architechies
More information about the swift-evolution
mailing list