我有以下相当简单雨燕2.0的代码斯威夫特协议如何才能符合类型参数协议
protocol PA {
init(handle:Int)
}
class CB: PA {
required init(handle:Int) {}
}
class X {
func test<U:PA>() -> U {
return U(handle: 1)
}
}
class ThisFails {
func foo() -> PA {
return X().test()
}
}
但它失败,很奇怪的错误消息编译
swift:23:20: error: generic parameter 'U' could not be inferred return X().test()
我想ü推断为PA类型
将方法foo
的返回类型更改为CB
使其正常工作,但我有许多类实现PA协议,因此不会为我工作。
类似地从U删除PA约束:PA和编译器推断它在foo
内部为PA类型,但是我需要在test
内部调用约束,这样也不会帮助我。
这是'正常'。测试() - > U是带有返回U类型实例的U类型参数的函数.foo返回类型是PA.Type,不是符合PA的类型,如U:PA。换句话说,从protocol.Type创建一个实例是不可能的。尝试让a = Any()。它也不可用。 –
user3441734