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

Arrays 将数组元素转换为其基类类型,arrays,swift,class,mapping,base-class,Arrays,Swift,Class,Mapping,Base Class,我正在尝试将数组中的元素转换为它们的基类类型: extension Array{ mutating func convertToBase<A>(type: A.Type){ let parentArray = self.map{ $0 as type } } } class A {} class B: A {} let instanceB = B() var array = [instanceB] array.convertToBase(typ

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

extension Array{

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

        let parentArray = self.map{ $0 as type }
    }
}

class A {}
class B: A {}

let instanceB = B()
var array = [instanceB]
array.convertToBase(type: A.self)
扩展数组{

变异func convertToBase这一点意义都没有。如果你有一个
B
数组,其基类是
A
,为什么你必须转换?运行时不是所有
B
s也
A
s吗

“转换”应简单到:

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 {
            $0 as! G
        }
        return parentArray
    }
}

如果
B
不是
a
的子类型,则将捕获。如果它是
a
的子类型,则另一个数组也将是
[a]
。我简直不敢相信我刚刚编写了这个几乎毫无用处的函数。

这根本没有意义。如果你有一个
B
数组,它的基类是
A
,为什么你必须转换?运行时不是所有
B
s,也是
A
s吗

“转换”应简单到:

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 {
            $0 as! G
        }
        return parentArray
    }
}

如果
B
不是
a
的子类型,则将捕获。如果它是
a
的子类型,则另一个数组也将是
[a]
。我简直不敢相信我刚刚编写了这个几乎毫无用处的函数。

这样做的主要目的是什么?我觉得做这样一个功能有点奇怪…我知道有点奇怪,但我在一个应用程序案例中需要它:)这样做的主要目的是什么?我觉得做这样一个功能有点奇怪…我知道它有点奇怪rd,但我在一个应用程序案例中需要它:)