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

时间:2016-12-07 11:08:18

标签: 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(type: A.self)

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

  

'使用未声明类型'类型''

{{3}}

1 个答案:

答案 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]。我无法相信我只是写了这个几乎没用的功能。