是否可以为 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
内的数据源 属性 何时设置。我也试过 didSet
和 willSet
但 Xcode 向我抛出错误,因为我认为这只适用于基元。
didSet
方法实际上应该工作正常,在 playground (Xcode 7 GM) 中使用以下代码没有问题:
class DTNavigationController : UINavigationController {
var dataSource: DTNavigationControllerDataSource? {
didSet {
print("new data source: \(dataSource)")
}
}
}
你好,我有一个名为 DTNavigationControllerDataSource
的协议,它被定义为(省略方法)
protocol DTNavigationControllerDataSource: NSObjectProtocol
然后,在我自己的自定义 UINavigationController
子类中,我有一个该协议的实例变量,如下所示。
var dataSource: DTNavigationControllerDataSource?
基本上我需要知道对象何时成为数据源。即 dataSource
属性 已设置。所以我可以在最初设置数据源时调用它来设置一些状态。我考虑过使用 KVO,但是 NSObjectProtocol
没有定义任何这样做的方法。我不确定这是否可能,或者是否有使用 KVO 之外的替代方法来知道 DTNavigationController
内的数据源 属性 何时设置。我也试过 didSet
和 willSet
但 Xcode 向我抛出错误,因为我认为这只适用于基元。
didSet
方法实际上应该工作正常,在 playground (Xcode 7 GM) 中使用以下代码没有问题:
class DTNavigationController : UINavigationController {
var dataSource: DTNavigationControllerDataSource? {
didSet {
print("new data source: \(dataSource)")
}
}
}