> On Jul 28, 2015, at 8:07 PM, Rick Mann <rm...@latencyzero.com> wrote: > > I'd like to have a Swift enum that lays out a set of states, and a property > of that type on an object that is KVObservable (i.e. dynamic). I don't think > this is possible. What I settled on was this: > > class > Model : MPObject > { > enum > DownloadState : NSNumber > { > case notDownloaded = 0 > case downloadStarted = 1 > case downloadComplete = 2 > case downloadError = 3 > } > > dynamic var thumbnailURL : NSURL? > dynamic var numFiles : NSNumber? > dynamic var filesDownloaded : NSNumber? > dynamic var downloadState : NSNumber? = > DownloadState.notDownloaded.rawValue > } > > But that's kinda gross. Any better approaches? Thanks!
It’s a lot of boilerplate, but you could do something like this: (disclaimer: written in Mail) class Model: MPObject { enum DownloadState : Int { … cases ... } var downloadState: DownloadState = .notDownloaded { willSet { self.willChangeValueForKey("downloadState") } didSet { self.didChangeValueForKey("downloadState") } } func valueForKey(key: String) -> AnyObject? { if key == "downloadState" { return NSNumber(integer: self.downloadState.rawValue) } else { return super.valueForKey(key) } } func setValue(value: AnyObject?, forKey key: String) { if key == "downloadState" { guard let rawValue = value as? Int, state = DownloadState(rawValue: rawValue) else { … handle this condition somehow … } self.downloadState = state } else { super.setValue(value, forKey: key) } } } I think this should allow a native Swift enum to be KVC-compliant. Alternative way to do it, with a little less boilerplate but an extra property: class Model: MPObject { enum DownloadState : Int { … cases ... } var downloadState: DownloadState = .notDownloaded { willSet { self.willChangeValueForKey("kvcDownloadState") } didSet { self.didChangeValueForKey("kvcDownloadState") } } dynamic var kvcDownloadState: Int { get { return self.downloadState.rawValue } set(rawValue) { guard let state = DownloadState(rawValue:rawValue) else { … handle this condition somehow ... } self.downloadState = state } } } Charles _______________________________________________ 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