子类类型作为函数参数
Subclass type as function parameter
我有一组对象。该数组包含不同的子类。
class MainClass {
}
class SubClass1: MainClass{
}
class SubClass2: MainClass{
}
var arrayOfObjects = [SubClass1(), SubClass2(), SubClass1()]
我想包含一个函数,用于删除属于特定子类类型的所有对象。
arrayOfObjects = arrayOfObjects.compactMap { [=11=] as? Subclass1 }
如何使用子类类型作为函数参数?
func removeObjectsOf(type: //??) {
arrayOfObjects = arrayOfObjects.compactMap { [=12=] as? type }
}
您可以使用 type(of:)
进行过滤
let filtered = arrayOfObjects.filter { type(of: [=10=]) == SubClass1.self }
或者如果你想把它写成一个函数
func filter(_ array: [MainClass], with classType: MainClass.Type) -> [MainClass] {
array.filter { type(of: [=11=]) == classType }
}
filter(arrayOfObjects, with: SubClass1.self)
您可以将这种类型作为泛型类型参数传递:
func removeObjectsOf<T: MainClass>(type: T.Type) {
arrayOfObjects = arrayOfObjects.compactMap { [=10=] as? T }
}
我有一组对象。该数组包含不同的子类。
class MainClass {
}
class SubClass1: MainClass{
}
class SubClass2: MainClass{
}
var arrayOfObjects = [SubClass1(), SubClass2(), SubClass1()]
我想包含一个函数,用于删除属于特定子类类型的所有对象。
arrayOfObjects = arrayOfObjects.compactMap { [=11=] as? Subclass1 }
如何使用子类类型作为函数参数?
func removeObjectsOf(type: //??) {
arrayOfObjects = arrayOfObjects.compactMap { [=12=] as? type }
}
您可以使用 type(of:)
let filtered = arrayOfObjects.filter { type(of: [=10=]) == SubClass1.self }
或者如果你想把它写成一个函数
func filter(_ array: [MainClass], with classType: MainClass.Type) -> [MainClass] {
array.filter { type(of: [=11=]) == classType }
}
filter(arrayOfObjects, with: SubClass1.self)
您可以将这种类型作为泛型类型参数传递:
func removeObjectsOf<T: MainClass>(type: T.Type) {
arrayOfObjects = arrayOfObjects.compactMap { [=10=] as? T }
}