Subscript an Arrary of generics type: error: Cannot subscript a value of type '[T]'

Subscript an Arrary of generics type: error: Cannot subscript a value of type '[T]'

如何解决这个问题?

protocol Mappable {
    ...
}
class Foo {
    item:AnyObject
}
class SomeClass<T:Mappable> {
    var someObject = Foo()
    var items:[T]
    ...
    func someFunction() {
        someObject.item = items[index] // error: Cannot subscript a value of type '[T]'
    }

我试过为订阅添加扩展 [T] 但失败了:

extension Array where Element:Mappable {
    subscript(index: Int) -> Element? {
        return indices ~= index ? self[index] : nil
    }
}

更新:这是误导性的错误消息,请参阅下面的答案

这只是您 class 的小改动。看看那个!

class SomeClass<T: Mappable>{
    var items:[T] = []
    func getSomeItem(index:Int) -> T{
        return self.items[index] as T // no error
    }
}

希望对您有所帮助!

问题不在于订阅。这是关于类型转换。 Swift 给出了误导性的错误信息。看看这一行:

someObject.item = items[index]
    AnyObject ^   ^ Mappable

Swift 不会隐式地将 Mappable 转换为 AnyObject。相反,您必须使用强制转换:

func someFunction() {
    // Assuming `index` is an Int
    someObject.item = items[index] as! AnyObject
}