将数组元素转换为其基础 class 类型

Convert elements of an array to their base class type

我正在尝试将数组中的元素转换为它们的基本 class 类型:

extension Array{

    mutating func convertToBase<A>(type: A.Type){

        let parentArray = self.map{ [=11=] as type }
    }
}

class A {}
class B: A {}

let instanceB = B()
var array = [instanceB]
array.convertToBase(type: A.self)

但它一直告诉我这个错误:

'Use of undeclared type 'type''

这根本说不通。如果你有一个 B 的数组,其基数 class 的类型是 A,为什么你必须转换?不都是B,还有A在运行时吗?

"Converting" 这应该很简单:

let instanceB = B()
var array = [instanceB]
var aArray  = array as [A]

如果您坚持使用您的方法,这应该可以解决问题:

extension Array{
    mutating func convert<G>(to type : G.Type) -> [G] {
        let parentArray = self.map {
            [=11=] as! G
        }
        return parentArray
    }
}

请注意,这会尝试将任何类型转换为通用类型 G。例如,这个:

var anotherArray = array.convert(to: A.self) 

... 如果 B 不是 A 的子类型,将陷入困境。如果它是 A 的子类型,anotherArray 也将是 [A]。我不敢相信我刚刚写了这个几乎没用的函数。