将数组元素转换为其基础 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]
。我不敢相信我刚刚写了这个几乎没用的函数。
我正在尝试将数组中的元素转换为它们的基本 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]
。我不敢相信我刚刚写了这个几乎没用的函数。