Почему эта регистрация [Swift] NSObject.addObserver не вызывает func наблюдайте за ValveForKeyPath(), как ожидалось?

Проблемный код следует. [Я надеюсь, что] проблема полностью изложена в вопросе выше. Заранее спасибо. MJB.

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
    var some_string:NSString = "one"

    func application ( application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]? ) -> Bool
    {
        println("init...")
        self.addObserver( self, forKeyPath: "some_string", options: nil, context: nil )
        self.some_string = "two"
        return true
    }

    override func observeValueForKeyPath ( keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void> )
    {
        println("observeValueForKeyPath...")
    }
}

1 ответ

Решение

Согласно документации Apple, вам необходимо использовать dynamic Ключевое слово, чтобы включить KVO для этого свойства:

dynamic var some_string : NSString = "one"

Кроме того, класс должен наследовать от NSObject чтобы сделать эту работу, хотя в вашем случае это дано с UIResponder,

Другие вопросы по тегам