2017-04-06 14 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

우수함! 사과 설명서는 Objective-C에서 작동하는 예를 보여 주며, Swift에서 작업하기에는 조금 까다 롭습니다. – grez