【发布时间】:2016-09-07 12:27:36
【问题描述】:
我需要子类中的扩展属性,但这段代码无法编译。
protocol A {
}
protocol B: A {
}
protocol C: A {
}
class Base {
var presenter: A?
}
class Left: Base {
override var presenter: B?
}
class Right: Base {
override var presenter: C?
}
如何在 Swift 2 上实现这一点?
【问题讨论】:
-
这是不可能的,因为您会更改超类的合同。这看起来像是一个架构问题,应该可以通过泛型、关联类型或更好的整体设计来解决。
-
我只是不想让超类知道子类的细节。为什么这是一个架构问题?现在我在每个子类中转换这个属性。
-
你正在尝试做的事情有很多问题 - read-write properties are invariant & protocols don't conform to themselves。正如 Sulthan 所说,您将不得不重新考虑您的设计。你的实际用例是什么?
标签: swift class inheritance protocols