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,但我在一个应用程序案例中需要它:)