Подтвердить что ты не робот

Использование наблюдателей свойств на NSManaged vars

У меня есть var, объявленный в таком классе:

@NSManaged var isFavorite: Bool

Я хотел бы объявить наблюдателя свойств, очень похожего на приведенное ниже.

 var organization: String {
        didSet { postNotificationWithName( "newData" ) }
    }

Однако Свифт говорит мне, что наличие наблюдателей свойств в NSMangaged vars не допускается. Можно ли каким-либо образом реализовать такую ​​функцию или что-то подобное для моей переменной isFavorite?

4b9b3361

Ответ 1

Да - удалите @NSManaged. Это не совсем необходимо, но если вы удалите его, вам, к сожалению, нужно реализовать get и set для свойства. Вам нужно добавить что-то вроде

public var newData: String?
    {
    set {
        self.willChangeValueForKey("newData")
        self.setPrimitiveValue(newValue, forKey: "newData")
        self.didChangeValueForKey("newData")
    }
    get {
        self.willAccessValueForKey("newData")
        let text = self.primitiveValueForKey("newData") as? String
        self.didAccessValueForKey("newData")
        return text
    }
}

Это раздражает, чтобы реализовать оба эти, если они вам действительно не нужны, но так, как сейчас.

Поскольку у вас будет set, вам может не понадобиться didSet, но вы можете добавить didSet, если хотите.

Ответ 2

Упс! Пол Паттерсон прав. То, что вы должны использовать, это Key Value Observing - это именно то, что он говорит, что вы должны делать в той ссылке, которую я предложил.

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

См. также быстрые примечания: https://developer.apple.com/library/mac/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html (используйте меню "В этой странице" в верхнем правом углу страницы для наблюдения за ключевыми значениями)

Так что-то вроде

objectToObserve.addObserver(self, forKeyPath: "organization", options: .New, context: &myContext)

в паре с

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {