2017-04-06 4 views
2

ブロックを使用して通知を削除する方法はわかりません。NotificationCenterのobserverを削除する - 「独自の初期値で使用される変数」

var block = NotificationCenter.default.addObserver(forName: .notifName, object: obj, queue: OperationQueue.current, using: { notification in 
      NotificationCenter.default.removeObserver(block) 

      // Do stuff 
     }) 

これは、「独自の初期値で使用される変数」というコンパイラエラーを表示します。このオブザーバーを削除するにはどうしたらいいですか?それは閉鎖 は、観察者が作成し、変数に が割り当てられているだけ後に実行されていることを「知って」いないため

答えて

2

コンパイラは文句を言います。

ブロック が実行されたときに値を持つことが保証されているため、あなたは暗黙的に開封されたオプションとして観測変数を宣言することができます。

var observer: NSObjectProtocol! 
observer = NotificationCenter.default.addObserver(forName: ..., object: ..., queue: ..., 
                using: { notification in 

    NotificationCenter.default.removeObserver(observer) 

    // Do stuff 
}) 
+0

グレート! Appleのドキュメントでは、Objective-Cで動作するこの例を示していますが、これはSwiftの作業を行うのにはややこしいことです。 – grez

関連する問題