arrays - 将超类数组扩展应用于子类实例数组
问题描述
有没有办法使用已应用于子类实例数组的超类的数组扩展?我试图通过以下方式这样做:
超类的扩展:
extension Array where Element == Superclass {
func appending(_ object:Element)-> [Element] {
var array = self
if self.filter({$0.id == object.id}).count == 0 {
array.append(object)
}
return array
}
}
子类数组的实现:
var subArray = [Subclass]()
subArray = subArray.appending(someObject)
但是,这给了我以下编译器错误:
“在 'Array' 上引用实例方法 'appending' 要求类型 'Subclass' 和 'Superclass' 是等价的。”
有什么方法可以实现这个功能,还是我必须为每个子类创建单独的扩展?
解决方案
使用:
而不是==
表示“一个子类型”:
class Superclass {
}
class Subclass : Superclass {
}
// here!
extension Array where Element: Superclass {
func f() {}
}
let a = [Subclass]()
a.f() // compiles!
推荐阅读
- android-studio - ADB.exe 已过时且存在严重的性能问题
- mysql - 在 Ubuntu 上使用 phpmyadmin 设置绝对 url
- javascript - Winston 将文件名记录到传输中
- windows - Docker 卷 + mongodb (-v) - 如何让它们在 Windows 10 中工作?
- typescript - 无法创建 BehaviourSubject
- cordova - Ionic_CordovaError:在 Android Studio 或您的系统上找不到安装的 Gradle 版本以安装 gradle 包装器
- python - 在python中排名
- vue.js - 在 v-for 中使用带有插槽的组件
- java - 有意打开任何文件
- sql-server - SQL Server 用户