我正在尝试将数组中的元素转换为基类类型:
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)
但它一直告诉我这个错误:
'使用未声明类型'类型''
{{3}}
答案 0 :(得分:2)
这根本没有意义。如果您的基类类型为B
的数组为A
,那么为什么必须进行转换? Aren在运行时中所有B
,还有A
吗?
&#34;转换&#34;这应该很简单:
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
}
}
请注意,这会尝试将ANY类型转换为泛型类型G
。例如,这个:
var anotherArray = array.convert(to: A.self)
...如果B
不是A
的子类型,则会陷阱。如果它是A
anotherArray
的子类型,也将是[A]
。我无法相信我只是写了这个几乎没用的功能。