子类类型作为函数参数

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 }
}