Swift 带有观察者的自定义导航栏项目

Swift Custom Navigation Bar Item With Observer

所以我有这个自定义导航栏项目,我想将其子类化并在其他 ViewControllers 中使用。问题是 Bar Item 还有一个 observer,我想在 ViewDidAppear 上添加它并删除 ViewDidDisappear 上的 observer。我怎样才能把subclass栏的项目连同observer出来。并将其包含在我的每个 ViewControllers 中而不是重复代码?

当前代码:

每个 ViewController:

override func viewWillAppear(animated: Bool) {
   if (!observingDefaults) {
      defaults.addObserver(self, forKeyPath: Constants.General.kConnectedToPC, options: NSKeyValueObservingOptions(), context: nil)
      observingDefaults = true
   }

   self.updateConnectionIcon()
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    if (observingDefaults) {
        defaults.removeObserver(self, forKeyPath: Constants.General.kConnectedToPC)
        observingDefaults = false
    }
}

我的导航栏项目扩展:

extension UIViewController {

func updateConnectionIcon() {
    self.navigationItem.rightBarButtonItem = nil

    let isConnected = NSUserDefaults.standardUserDefaults().boolForKey(Constants.General.kConnectedToPC)

    let button = UIButton()

    if isConnected {
        button.setImage(UIImage(named: "BluetoothEnabled")?.imageWithRenderingMode(.AlwaysTemplate), forState: UIControlState.Normal)
    } else {
        button.setImage(UIImage(named: "BluetoothDisabled")?.imageWithRenderingMode(.AlwaysTemplate), forState: UIControlState.Normal)
    }

    button.frame = CGRectMake(0, 0, 23, 31)
    button.tintColor = UIColor.whiteColor()
    button.userInteractionEnabled = false
    let barButton = UIBarButtonItem(customView: button)
    self.navigationItem.rightBarButtonItem = barButton
}
}

无论如何,我可以将上半部分添加到底部代码中,这样我就可以在每个 ViewController?

中调用 updateConnectionIcon()

与其在每个 viewController 中放置观察者,不如创建一个 BaseClase 并将其保留在那里并继承所有需要这些观察者的 class。有道理吗?