Thanks, Charles, that's helpful. In the end I left the class as Obj-C, because I still had to derive from it in Obj-C and you annoyingly can't do that.
> On Apr 17, 2017, at 08:06 , Charles Srstka <cocoa...@charlessoft.com> wrote: > >> On Apr 17, 2017, at 3:24 AM, Rick Mann <rm...@latencyzero.com> wrote: >> >> I have a number of properties in Objective-C written like this, >> short-circuiting notifications when the value doesn't change: >> >> ------------- >> @synthesize version = mVersion >> >> - (void) >> setVersion: (NSString *) inVersion >> { >> if (inVersion == nil && mVersion == nil) >> { >> return; >> } >> if ([inVersion isEqualToString: mVersion]) >> { >> return; >> } >> >> [self willChangeValueForKey: @"version"]; >> mVersion = inVersion; >> [self didChangeValueForKey: @"version"]; >> } >> ------------- >> >> Now I want to translate this method into Swift. Thing is, AFAIK you can't >> name the ivar created for a property. Is there a way to translate this to >> swift? > > I’ve been converting a lot of KVO properties to Swift lately. Here’s how I’d > do this: > > // Only needed if the property will be accessed by Objective-C code, since > Swift code won’t see the swizzled accessors anyway for a non-dynamic property. > // @objc annotation is needed on every method we write here, since otherwise > it’ll quit working when @objc inference is removed in Swift 4 (SE-0160) > @objc private static let automaticallyNotifiesObserversOfVersion: Bool = false > > // Our actual version property. If you want, you can create a private > property named “mVersion” and it will function like an instance variable. > // But I’d probably just use willSet and didSet. > // Note that this doesn’t need to be dynamic, since we are not relying on > Cocoa’s built-in automatic swizzling, > // which is only needed if we are not calling willChangeValue(forKey:) and > didChangeValue(forKey:) ourselves. > @objc var version: String { > willSet { > // Send the willChange notification, if the value is different from > its old value. > if newValue != self.version { > self.willChangeValue(forKey: #keyPath(version)) > } > } > didSet { > // Send the didChange notification, if the value is different from > its old value. > if oldValue != self.version { > self.didChangeValue(forKey: #keyPath(version)) > } > } > } > > Charles > -- Rick Mann rm...@latencyzero.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com