[swift-evolution] SE-0064 Property Selectors and KVO
David Hart
david at hartbit.com
Sun Jun 5 13:16:48 CDT 2016
#selector(Thing.thingWatched) won't work because it expects a function. As thingWatched is a property, it doesn't know if you want to reference the getter or setter. SE-0064 lets you reference those explicitly. In this case, you could write NSStringFromSelector(#selector(getter: Thing.thingWatched)), which is far from elegant. SE-0062 is there to fix that: #keyPath(Thing.thingWatched) will return the correct string.
Sent from my iPhone
> On 04 Jun 2016, at 16:18, Rob Napier <robnapier at gmail.com> wrote:
>
> Currently KVO requires hard-coding strings to check the keypath. Does SE-0064 cover returning a string when a string is required? For example:
>
> override func observeValueForKeyPath(keyPath: String?,
> ofObject object: AnyObject?,
> change: [String : AnyObject]?,
> context: UnsafeMutablePointer<Void>) {
> if let changingThing = object as? Thing,
> keyPath = keyPath where changingThing === thing {
>
> switch keyPath {
> case "thingWatched": ...
>
> I'd like to replace that last line with:
>
> case #selector(Thing.thingWatched):
>
> Or something similarly non-stringy.
>
> Alternately, this comes back to your "Referencing Objective-C key-paths" proposal, but I'm wondering if 0064 already covers this case.
>
> -Rob
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160605/89dd4976/attachment.html>
More information about the swift-evolution
mailing list