请考虑以下代码:
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()
这很管用。
我想知道为什么这样的差异存在,如果有任何解决办法呢?
最佳答案
将Bar2()
转换为泛型类型T
func function<T:Foo>(arg:T = Bar2() as! T) {
arg.f()
}