【发布时间】:2014-10-09 13:49:25
【问题描述】:
我正在尝试根据指定的泛型类型强制转换和/或生成变量。我知道 swift 中没有类型擦除,但除了泛型的指定条件之外,泛型似乎不保留类型,例如符合基类。似乎我可以转换或初始化的只是基类。更奇怪的是,当我在调试器中时,泛型似乎有一个指向正确类的 RawPointer,甚至变量看起来都是正确的类型:
编辑:
从 Xcode 6.1 开始,这仍然是一个问题(简化代码由 Gregory Higley 提供):
class BaseClass {
func printme() -> Void {
println("I am BaseClass")
}
}
class DerivedClass : BaseClass {
override func printme() -> Void {
println("I am DerivedClass")
}
}
class Util<T: BaseClass> {
func doSomething() {
var instance = T()
instance.printme()
}
}
var util = Util<DerivedClass>()
util.doSomething()
仍然打印出“I am BaseClass”
还要注意,基类中所需的 init{} 不再起作用。
【问题讨论】:
-
你应该把正确答案改成 rintaro's。
-
@rfrittelli - 实际上正确的答案是 JeremyP 在下面。我已经确认它有效,并且 rintaro 的答案在最新的 XCode 中不再有效。
-
您的原始输出是什么(它会有所帮助)?从 6.1 开始,两个测试都会产生相同的结果,这是预期的。你也能说出你的问题吗?
-
我对我的帖子进行了编辑。但我的问题是它是错误的以及如何解决。取决于你如何看待它似乎是一个错误。