是否可以为 Swift 中的协议实例设置观察者(KVO)

Is it possible to set observer(KVO) for a protocol instance in Swift

你好,我有一个名为 DTNavigationControllerDataSource 的协议,它被定义为(省略方法)

protocol DTNavigationControllerDataSource: NSObjectProtocol

然后,在我自己的自定义 UINavigationController 子类中,我有一个该协议的实例变量,如下所示。

var dataSource: DTNavigationControllerDataSource?

基本上我需要知道对象何时成为数据源。即 dataSource 属性 已设置。所以我可以在最初设置数据源时调用它来设置一些状态。我考虑过使用 KVO,但是 NSObjectProtocol 没有定义任何这样做的方法。我不确定这是否可能,或者是否有使用 KVO 之外的替代方法来知道 DTNavigationController 内的数据源 属性 何时设置。我也试过 didSetwillSet 但 Xcode 向我抛出错误,因为我认为这只适用于基元。

didSet 方法实际上应该工作正常,在 playground (Xcode 7 GM) 中使用以下代码没有问题:

class DTNavigationController : UINavigationController {
    var dataSource: DTNavigationControllerDataSource? {
        didSet {
            print("new data source: \(dataSource)")
        }
    }
}