合并与相同的超类Swift数组

我试图find合并Swift数组的不同types的最佳方法,但它们具有相同的超类。 我已经阅读了所有的教程,所以我知道我可以使用:

var array = ["Some", "Array", "of", "Strings"] array += ["Another string", "and one more"] array.append(["Or", "This"]) 

在这种情况下, arrayvariables推断types[String] 。 我遇到的问题涉及到下一个类的假设情况( 属性在这种情况下无关紧要,只是在类之间做出区别 ):

 class A { var property1 : String? } class B : A { var property2: String? } class C : A { var property3: String? } 

所以我创build了一个类AB对象的数组:

 var array = [ A(), B(), A(), B() ] 

这个数组现在应该是[A]types的,因为这是AB类的推断types。

现在我想将对象附加到这个数组,types为C

var anotherArray = [ C(), C(), C() ]

由于anotherArray现在是types[C] ,所以我们仍然可以追加它,因为所有C实例都对A方法做出响应。 所以我们尝试:

 array += anotherArray 

由于:

 Binary operator '+=' cannot be applied to operands of type '[A]' and '[C]'. 

与使用append方法类似的故事。 虽然这是有道理的,但我不明白为什么这不起作用。

有人可以解释为什么这是行不通的? 这个问题最好的解决办法是什么?

我发现唯一合理的解决scheme是将anotherArray的types定义为[A] ,但是有没有更好的或者这是正确的?

 var anotherArray : [A] = [ C(), C(), C() ] 

谢谢!

如果CAinheritance,那么可以将types为[C]的数组“上传”为types为[A]的数组,

 array += anotherArray as [A] 

除了Martin的回答,你可以创build一个协议,所有的类都符合,然后当创build你的数组时,使其input该协议。

然后你可以添加任何类到它而不铸造。

你几乎可以合并一切。 唯一的要求是结果数组的所有元素必须符合相同的协议。

 let arr1 = [1,2,3] // [Int] let arr2 = [4.0,5.0,6.0] // [Double] let arr3 = ["a","b"] // [String] import Foundation // NSDate let arr4 = [NSDate()] // [NSDate] // the only common protocol in this case is Any var arr:[Any] = [] arr1.forEach { arr.append($0) } arr2.forEach { arr.append($0) } arr3.forEach { arr.append($0) } arr4.forEach { arr.append($0) } print(arr) // [1, 2, 3, 4.0, 5.0, 6.0, "a", "b", 2016-02-15 08:25:03 +0000]