【发布时间】:2015-05-11 14:07:22
【问题描述】:
我正在尝试找到合并 Swift 数组的最佳方法,这些数组的类型不同,但它们具有相同的超类。我已经阅读了所有教程,所以我知道我可以使用:
var array = ["Some", "Array", "of", "Strings"]
array += ["Another string", "and one more"]
array.append(["Or", "This"])
在这种情况下,array 变量推断出[String] 的类型。我遇到的问题与类的下一个假设情况有关(在这种情况下属性无关紧要,只是为了在类之间产生差异):
class A {
var property1 : String?
}
class B : A {
var property2: String?
}
class C : A {
var property3: String?
}
所以我创建了一个类数组 A 和 B 对象:
var array = [ A(), B(), A(), B() ]
这个数组现在应该是[A] 类型,因为这是A 和B 类推断的类型。
现在我想将对象附加到这个数组,类型为C。
var anotherArray = [ C(), C(), C() ]
由于anotherArray 现在是[C] 类型,我们应该仍然可以附加它,因为所有C 实例都响应A 方法。所以我们尝试:
array += anotherArray
由于以下原因导致失败:
Binary operator '+=' cannot be applied to operands of type '[A]' and '[C]'.
使用append 方法的类似故事。虽然这确实有道理,但我不明白为什么这不起作用。
有人可以解释为什么这不起作用吗?这个问题的最佳解决方案是什么?
我找到的唯一明智的解决方案是将anotherArray 的类型定义为[A],但是还有更好的解决方案还是正确的?
var anotherArray : [A] = [ C(), C(), C() ]
谢谢!
【问题讨论】: