【发布时间】:2016-11-14 14:01:07
【问题描述】:
我有协议和他用 Swift 编写的实现:
protocol P {
}
struct A: P {
}
Protocol 被用作某些函数的泛型:
func foo<T: P>(param: T) {
}
func foo() {
foo(param: A())
}
到目前为止,一切正常。但我想将 A() 设置为给定函数的默认参数:
func foo<T: P>(param: T = A()) {
}
很遗憾出现以下错误:
“A”类型的默认参数值无法转换为“T”类型。
或者
func foo<T: P>(param: T = A() as P) {
}
,
let a: P = A()
func foo<T: P>(param: T = a) {
}
返回:
“P”类型的默认参数值无法转换为“T”类型
或者
func foo<T: P>(param: T = A() as T) {
}
返回:
'A' 不能转换为 'T';你的意思是用'as!'强制沮丧?
我做错了什么?问题出在哪里?
我不想像这样使用强制转换:
func foo<T: P>(param: T = A() as! T) {
}
提前谢谢你。
【问题讨论】: