将超类数组扩展应用于子类实例数组
Applying superclass array extensions to arrays of subclass instances
有没有办法在子类实例的数组上使用已应用于超类的数组扩展?我试图通过以下方式这样做:
超类扩展:
extension Array where Element == Superclass {
func appending(_ object:Element)-> [Element] {
var array = self
if self.filter({[=10=].id == object.id}).count == 0 {
array.append(object)
}
return array
}
}
子类数组的实现:
var subArray = [Subclass]()
subArray = subArray.appending(someObject)
但是,这给了我以下编译器错误:
"Referencing instance method 'appending' on 'Array' requires the types
'Subclass' and 'Superclass' be equivalent."
有什么方法可以实现这个功能,还是我必须为每个子类创建单独的扩展?
使用 :
而不是 ==
表示“的子类型”:
class Superclass {
}
class Subclass : Superclass {
}
// here!
extension Array where Element: Superclass {
func f() {}
}
let a = [Subclass]()
a.f() // compiles!
有没有办法在子类实例的数组上使用已应用于超类的数组扩展?我试图通过以下方式这样做:
超类扩展:
extension Array where Element == Superclass {
func appending(_ object:Element)-> [Element] {
var array = self
if self.filter({[=10=].id == object.id}).count == 0 {
array.append(object)
}
return array
}
}
子类数组的实现:
var subArray = [Subclass]()
subArray = subArray.appending(someObject)
但是,这给了我以下编译器错误:
"Referencing instance method 'appending' on 'Array' requires the types 'Subclass' and 'Superclass' be equivalent."
有什么方法可以实现这个功能,还是我必须为每个子类创建单独的扩展?
使用 :
而不是 ==
表示“的子类型”:
class Superclass {
}
class Subclass : Superclass {
}
// here!
extension Array where Element: Superclass {
func f() {}
}
let a = [Subclass]()
a.f() // compiles!