是否可以为模板函数参数提供默认值?

时间:2017-07-30 07:45:23

标签: ios swift templates generics default-value

请考虑以下代码:

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()

这很好用。

我想知道为什么存在这种差异,以及是否有任何解决方法?

1 个答案:

答案 0 :(得分:0)

Bar2()转换为通用类型T

func function<T:Foo>(arg:T = Bar2() as! T) {
        arg.f()
}