Для тех, кто ищет решение в Swift 2.2 и выше и кто достиг такого вопроса, как я, вы можете создать расширение следующим образом:
import Foundation
extension NSNotificationCenter {
func setObserver(observer: AnyObject, selector: Selector, name: String?, object: AnyObject?) {
NSNotificationCenter.defaultCenter().removeObserver(observer, name: name, object: object)
NSNotificationCenter.defaultCenter().addObserver(observer, selector: selector, name: name, object: object)
}
}
Вы можете вызвать этот метод следующим образом:
NSNotificationCenter.defaultCenter().setObserver(self, selector: #selector(methodName), name: "name", object: nil)
Расширение будет обрабатывать удаление предыдущего наблюдателя, если оно существует. Даже если не было предыдущего наблюдателя, этот код не вылетел.