如何在Swift中合并多个数组?

Chipbk10

我有几个类看起来像这样:


A级{} 
A1级:A {} 
A2级:A {} 

A3级:A {} 
A4级:A {}

级main { 
    var a1:A1 
    var a2:A2 
    var a3s:[A3] 
    var a4s:[A4 ] 

    func getAll()-> [A] { 
        return([a1,a2] + a3s + a4s)
    } 
}

如果看一下函数getAll(),您会看到我尝试返回类型为基类A的所有对象的Array。但是,我总是会收到错误消息:

“二进制运算符'+( :)'不能应用于类型'[Any]'和'[a3s]'的操作数”

您知道这种情况下的正确方法是什么吗?

安德里亚·穆尼亚尼(Andrea Mugnaini)

我想这只是正确转换数组的问题,您可以这样解决:

func getAll() -> [A] {
    return ([a1, a2] as [A] + a3s as [A] + a4s)
}

只是为了好玩:如果您想动态解决问题,则可以通过以下方式使用反射:

class A {}
class A1 : A {}
class A2 : A {}
class A3 : A {}
class A4 : A {}

class main {
    var a1 = A1()
    var a2 = A2()
    var a3s : [A3] = [A3()]
    var a4s : [A4] = [A4(), A4()]

    func getAll() -> [A] {
        var res = [A]()
        Mirror(reflecting:self).children.forEach {
            if let a = $0.value as? A {
                res.append(a)
            } else if let aArray = $0.value as? [A] {
                res.append(contentsOf: aArray)
            }
        }
        return res
    }
}

let all = main().getAll()
print(all) //A1, A2, A3, A4, A4

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章