I'm trying to find the best way to merge Swift arrays, that are not of same type, but they have same superclass. I've already read all the tutorials so I know I can use:
var array = ["Some", "Array", "of", "Strings"]
array += ["Another string", "and one more"]
array.append(["Or", "This"])
In this case array
variable infers the type [String]
. The problem I have relates to the next hypothetical situation with classes (properties do not matter in this case, just there to make a difference between classes):
class A {
var property1 : String?
}
class B : A {
var property2: String?
}
class C : A {
var property3: String?
}
So I create an array of class A
and B
objects:
var array = [ A(), B(), A(), B() ]
This array should now be of type [A]
, since this is the inferred type by both A
and B
classes.
Now I want to append objects to this array, that are of type C
.
var anotherArray = [ C(), C(), C() ]
Since anotherArray
is now of type [C]
, we should still be able to append it, since all C
instances respond to A
methods. So we try:
array += anotherArray
This fails due to:
Binary operator '+=' cannot be applied to operands of type '[A]' and '[C]'.
Similar story with using append
method. While this does make sense, I cannot understand why this couldn't work.
Can someone explain why this is not working? What is the best solution to this problem?
The only sensible solution I found is to define the type of anotherArray
to be [A]
, but are there any better ones or this is correct?
var anotherArray : [A] = [ C(), C(), C() ]
Thanks!
See Question&Answers more detail:
os