删除 NotificationCenter 的观察者 - "Variable used within its own initial value"

Remove observer for NotificationCenter - "Variable used within its own initial value"

我不明白如何使用块删除通知的观察者。

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

            // Do stuff
        })

这会出现编译器错误 "Variable used within its own initial value"。我怎样才能删除这个观察者?

编译器抱怨,因为它没有 "know" 闭包 仅在 观察者创建并分配后执行 到变量。

您可以将观察者变量声明为隐式展开的可选,因为它保证在块时有值 被执行:

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

    NotificationCenter.default.removeObserver(observer)

    // Do stuff
})