是否可以在Swift中为协议实例设置observer(KVO)

时间:2015-09-11 21:15:21

标签: ios swift uinavigationcontroller protocols

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

protocol DTNavigationControllerDataSource: NSObjectProtocol

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

var dataSource: DTNavigationControllerDataSource?

基本上我需要知道对象何时成为dataSource。即dataSource属性已设置。所以我可以在初始设置时调用dataSource来设置某个状态。我考虑过使用KVO但NSObjectProtocol没有定义任何方法。我不确定这是否可能,或者除了使用KVO之外还有另一种方法可以知道DTNavigationController内的dataSource属性何时设置。我也试过了didSetwillSet,但Xcode向我提出了错误,因为我认为这只适用于基元。

1 个答案:

答案 0 :(得分:1)

didSet方法实际上应该可以正常工作,在操场上(Xcode 7 GM)下面的代码没有问题:

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