如何解决这个问题?
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
}
}
更新:这是一条误导性错误消息,请参阅以下答案
答案 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
}
}
希望这有帮助!