【发布时间】:2015-02-28 21:15:46
【问题描述】:
我有一个非常简单的游乐场:
protocol MyProtocol {}
struct MyType: MyProtocol {}
class MyClass <T: MyProtocol> {
func myFunction(array: [T]) {
if let myArray = array as? [MyType] {
println("Double!")
}
}
}
let instance = MyClass<MyType>()
let array = [MyType(), MyType()]
instance.myFunction(array)
然后它在if let 行上显示“MyType is not a subtype of 'T'”。不过,我认为MyType 和T 是兼容的。
当我修改if let 语句时,它确实有效:
if let first = array.first as? MyType
但现在我不能将 array 转换为 [MyType](当然,我知道这是 Swift 的静态类型规范。)
我想知道问题出在哪里。我对泛型的理解?还是 Swift 语言的限制?如果是这样,有什么办法可以这样做吗?
提前致谢。
【问题讨论】: