【发布时间】:2014-12-12 03:38:37
【问题描述】:
我是 Swift 新手,所以我可能会做一些愚蠢的事情。如果是这样,太好了:请告诉我在哪里!
在以下代码中,您将看到类Derived 继承自泛型类Base<T>:
class Base<T> {
func method(Int) -> T {
fatalError("Subclasses must override method.")
}
}
class Derived<T> : Base<Int> {
override func method(input:Int) -> Int {
return input
}
}
在 Swift 1.1 中,非泛型类不可能从泛型类继承。因此,在这种情况下,Derived 有一个虚拟类型变量。
如果我现在使用这些类:
class Container {
let item: Base<Int>
init(item:Base<Int>) {
self.item = item
}
func method(input:Int) -> Int {
return item.method(input)
}
}
let a = Derived<Int>()
let b = Container(item:a)
let test = b.method(42)
代码编译良好,但在调用 Derived<Int>.method 时出现段错误。根据我目前的调试,看起来self 指针在Container.method 中是正确的,但是一旦我们进入Derived<Int>.method 就错了。也许发生了一些堆栈损坏?
对此代码的各种细微更改使其可以正常工作(尽管具有不同的语义)。谁能解释这里发生了什么?在我对 Swift 有更多了解之前,我很犹豫是否建议编译器错误。
【问题讨论】:
标签: generics inheritance swift virtual-functions