[英]Swift cannot specialize generic parameter when the specializing type is constrained with additional protocol
[英]Cannot pass protocol to function with constrained generic type
如果您的函数具有受限于协议的泛型类型,则无法将协议类型的值传递给该函数:
protocol P {}
extension Int: P {}
func testP<T: P>(value: T) {}
// passing Int
let val = 0
testP(val)
// passing Int as P (protocol)
let valAsP: P = 0
testP(valAsP) // error: cannot invoke 'testP' with an argument list of type '(P)'
如果我将协议更改为类(并改为使用继承),则在两种情况下都将执行相同的功能。
另外,《 The Swift Programming Language》这本书说
声明中的冒号表示“ ...类型...”,
如果对于通用约束也是如此,我会认为这是一个错误。
因此,应该将其视为错误吗? 还是在任何情况下有此行为有用?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.