Thanks a lot Jordan for pointing out the root cause. The underlying executing and finished properties are readonly properties.
For an Asynchronous operation I had to override it tell when the asynchronous operation completes. Since they are readonly properties I am unable to call the super on them to set values. I can still use String, was just wondering if there was a way to do it using KeyPath. It is more out of enthusiasm to try out the KeyPath feature in the project :) Would it be appropriate to file a bug report for the implementation of Operation ? Thanks and regards, Muthu > On 14 Jun 2017, at 1:32 AM, Jordan Rose <jordan_r...@apple.com> wrote: > > Hi, Muthu. This is a longstanding issue with Operation—the Objective-C name > of the property is just "executing", but the KVO keys that the implementors > used is "isExecuting". Swift isn't set up to deal with this difference. > > Fortunately, the base implementation of Operation already knows how to send > the KVO notifications, so you shouldn't have to override these properties at > all. If you still want to for some other reason, you can call super instead > of storing to a private property. > > Hope that helps, > Jordan > > >> On Jun 13, 2017, at 06:40, somu subscribe via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >> >> Hi, >> >> I am having trouble using KeyPath to KVC (Key Value Code) in Swift 4. >> >> I have a subclass of Operation and I am overriding the isFinished and >> isExecuting property. >> >> Problem: >> - When I use KeyPath, the completionBlock of the operation is not invoked. >> - However when I use String instead of KeyPath, the completionBlock is >> invoked. >> >> Questions: >> - Am I missing something ? >> - Is there a way to fix it using KeyPath ? >> >> Code: >> >> override var isExecuting : Bool { >> >> get { >> return _executing //property in the class >> } >> >> set { >> willChangeValue(for: \.isExecuting) >> _executing = newValue >> didChangeValue(for: \.isExecuting) >> } >> } >> >> override var isFinished : Bool { >> >> get { >> return _finished //property in the class >> } >> >> set { >> willChangeValue(for: \.isFinished) >> _finished = newValue >> didChangeValue(for: \.isFinished) >> } >> } >> >> >> Configuration: >> - Xcode - 9.0 beta (9M136h) >> - Tested on Simulator (iOS 11) >> - macOS Sierra - 10.12.5 (16F73) >> >> >> Thanks and Regards, >> Muthu >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org <mailto:swift-users@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-users >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users