【发布时间】:2017-03-06 00:20:32
【问题描述】:
我正在尝试这种技术:
class Pet {}
class Dog: Pet {}
class House {
func getPets() -> [Pet] {
return [Pet]()
}
}
class DogHouse: House {
override func getPets() -> [Dog] {
return [Dog]()
}
}
DogHouse 类以严格满足HousegetPets 的 API 要求的方式覆盖 House getPets 方法。
但是,Swift 不理解 [Dog] 是 [Pet] 并产生错误 Method does not override any method from its superclass。
子类有什么方法可以实现比其父类更通用的输入或更严格的输出的 API?
【问题讨论】:
-
我回答你的问题了吗?
-
没有真正的理由不能做到这一点——Swift 编译器可以专门处理子类型数组到超类型数组之间的转换。这似乎只是一个边缘情况,因为
Array是泛型的,因此编译器认为它是不变的(泛型是),即使它可以发挥一些魔力使其在大多数地方看起来是协变的(参见例如this Q&A)。另请参阅this related bug report。
标签: swift