最佳答案
为什么这个 Swift 代码无法编译?
protocol P { }
struct S: P { }
let arr:[P] = [ S() ]
extension Array where Element : P {
func test<T>() -> [T] {
return []
}
}
let result : [S] = arr.test()
编译器说: “ Type P
不符合协议 P
”(或者,在 Swift 的后续版本中,“不支持使用‘ P’作为符合协议‘ P’的具体类型。”).
为什么不呢?不知怎么的,这感觉像是语言的漏洞。我意识到这个问题源于将数组 arr
声明为数组 协议类型,但是这样做是不是不合理呢?我以为协议是用来帮助提供类似类型层次结构的结构的?