我有几个类是这样的:
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/