我有一个非常简单的游乐场:
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不是'T'的子类型
”。我认为,然而,MyType
和T
是兼容的。
当我修改了if let
语句后,它就可以正常工作了:
if let first = array.first as? MyType
但是现在我无法将array
转换为[MyType]
(当然,我知道这是Swift的静态类型规定)。
我想知道问题出在哪里。我的理解有问题吗?或者是Swift语言的限制?如果是这样的话,有没有什么办法可以做到这一点?
提前感谢。