我有几个类是这样的:

A 类{}
A1 类:A {}
A2 类:A {}

A3 类:A {}
A4 类:A {}

类主{
变量 a1 : A1
变量 a2 : A2
变量 a3s : [A3]
变量 a4s : [A4]

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

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



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

最佳答案

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

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

关于ios - 如何在 Swift 中合并多个数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48540525/

10-13 04:54