2015-04-19 5 views
0

В настоящее время лучшая практика для КВО в Swift хорошо документирована в this SO post, и будет выглядеть примерно так:Swift: в каком классе принадлежит свойство .New, используемое в NSObject.addObserver (... options: .New)?

someObject.addObserver(self, forKeyPath: "someProperty", options: .New, 
    context: &self.someContext) 

Я хочу, чтобы упростить проблемы управления памятью герметизирующего это в (скажем) класса ObserversManager, так что я могу сделать что-то вроде этого:

func observe (observed: NSObject, observer: NSObject, keyPath: String, 
    context: Int) 
{ 
    observed.addObserver(observer, forKeyPath: keyPath, options: .New, 
     context: context) { ... } 
} 

func removeObserversByObserver (observer: NSObject) { ... } 
func removeAllObservers() { ... } 

Проблема заключается в том, что выше FUNC наблюдатель выдает следующее сообщение об ошибке компиляции времени, который я нахожусь в настоящее время не в силах исправить, так как о В официальной документации нет подробного ответа на вопрос. Could not find member 'New'

ответ

1

Сообщение об ошибке вводит в заблуждение. Проблема заключается в том, что параметр context: является указателем, не Int:

func observe (observed: NSObject, observer: NSObject, keyPath: String, 
    context: UnsafeMutablePointer<Void>) 
{ 
    observed.addObserver(observer, forKeyPath: keyPath, options: .New, 
         context: context) 
} 
+0

Спасибо @ мартеновского-р –