下标泛型的Arrary:错误:不能下标类型的值' [T]'

时间:2016-02-06 11:50:28

标签: arrays swift generics subscript

如何解决这个问题?

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
    }
}

更新:这是一条误导性错误消息,请参阅以下答案

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

这是你班上的小变化。看看吧!

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

希望这有帮助!