请考虑以下代码:
protocol Foo {
func f() -> Void
}
class Bar1: Foo {
func f() {
print("Bar1 f")
}
}
class Bar2: Foo {
func f() {
print("Bar2 f")
}
}
func function<T:Foo>(arg:T = Bar2()) {
arg.f()
}
它会出现错误Value of type Bar2 cannot be converted to type T
,这似乎是纯粹的废话,因为T
保证与Foo
兼容,这是分配应该在其中运行的上下文。
为了证明这一点:
let global: Foo = Bar2()
global.f()
这很好用。
我想知道为什么存在这种差异,以及是否有任何解决方法?
答案 0 :(得分:0)
将Bar2()
转换为通用类型T
func function<T:Foo>(arg:T = Bar2() as! T) {
arg.f()
}