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
}
如何解决这个问题?
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
}