Использование наблюдателей свойств на NSManaged vars
У меня есть var, объявленный в таком классе:
@NSManaged var isFavorite: Bool
Я хотел бы объявить наблюдателя свойств, очень похожего на приведенное ниже.
var organization: String {
didSet { postNotificationWithName( "newData" ) }
}
Однако Свифт говорит мне, что наличие наблюдателей свойств в NSMangaged
vars не допускается. Можно ли каким-либо образом реализовать такую функцию или что-то подобное для моей переменной isFavorite
?
Ответы
Ответ 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>) {