我有几个类看起来像这样:
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]'的操作数”
您知道这种情况下的正确方法是什么吗?
我想这只是正确转换数组的问题,您可以这样解决:
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] 删除。
我来说两句