0

Swift での KVO の現在のベスト プラクティスは、この SO 投稿に詳しく記載されており、次のようになります。

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'

4

1 に答える 1

1

エラー メッセージは誤解を招きます。問題は、context:パラメーターがInt ではなくpointerであることです。

func observe ( observed: NSObject, observer: NSObject, keyPath: String,
    context: UnsafeMutablePointer<Void> )
{
    observed.addObserver(observer, forKeyPath: keyPath, options: .New,
                         context: context)
}
于 2015-04-19T09:17:42.197 に答える