【发布时间】:2015-06-27 21:48:45
【问题描述】:
我正在尝试为 Swift 中的问题实现一个干净的 OOP 结构。似乎 Swift 1.2 和 Apple 对面向协议编程的新拥抱应该是可能的。
我有一个 A 类,它有自己的委托 ADelegate。 A 本身调用 ADelegate 的方法。
两个子类继承了 A:B 和 C。B 有一些委托方法,只有它应该能够调用,所以它想要自己的委托,BDelegate,它继承了 ADelegate 并添加了一些方法。同样,C 希望它的委托是 CDelegate,它继承了 ADelegate 并添加了一些方法。
最简洁的构造方法是给 A 一个属性var delegate: ADelegate。然后,不知何故,B 和 C 分别获得属性 override var delegate: BDelegate 和 override var delegate: CDelegate。这样他们就可以使用 ADelegate 公开的方法以及他们自己的特定实现。但是,Swift 不允许我编译它,因为我无法覆盖属性并为其分配不同的类型。
我知道我可以在子类上创建一个不同的命名委托属性,这样就不会发生冲突。我也知道我可以让子类投射委托,但这是一项昂贵的操作,而且不是很干净。
感觉他们应该是一种面向协议的处理方式。总而言之,目标是允许子类覆盖具有更具体类型的超类的属性。有什么想法吗?
【问题讨论】:
标签: ios swift oop inheritance protocols