Ich habe ein merkwürdiges ( und gefährliches IMHO ) Verhalten in Erstellen eines Arrays mit einem Standardwert bemerkt. Wie in Swift 2.1: Collection-Typen
beschriebenDer Swift-Array-Typ bietet auch einen Initialisierer zum Erstellen eines Arrays mit einer bestimmten Größe, bei dem alle Werte auf den gleichen Standardwert eingestellt sind. Sie übergeben diesem Initialisierer die Anzahl der Elemente, die dem neuen Array hinzugefügt werden sollen (count genannt) und einen Standardwert des entsprechenden Typs (repeatedValue genannt):
Der Punkt ist: gleicher Standardwert ; Um zu verstehen, wie es funktioniert, habe ich versucht, ein Array von Elementen dieser Beispielklasse zu erstellen
%Vor%und dieser Testcode:
%Vor%gibt:
%Vor%, die den Initialisierer endgültig mit der Anzahl der dem neuen Array hinzuzufügenden Elemente und einem Standardwert des entsprechenden Typs belegen: dieselbe Objektinstanz
Wie ist es möglich, so kurz und bündig wie möglich ein Array von verschiedenen Objektinstanzen zu erhalten, das mit dem gleichen Standardwert versehen ist (nicht die gleiche Instanz, sondern eine mit dem gleicher Standardwert)?
Klassen sind Referenztypen, daher - wie Sie bemerkt haben - alle Arrays Elemente in
%Vor%referenziert die gleiche Objektinstanz (die zuerst erstellt wird und dann übergeben als Argument an den Array-Initialisierer).
Für einen struct
-Typ würden Sie ein anderes Ergebnis erhalten.
Eine mögliche Lösung:
%Vor% Hier wird eine User
-Instanz für jeden der Array-Indizes erstellt.
Wenn Sie das häufig brauchen, können Sie ein Array-Init definieren Methode, die einen "autoclosure" -Parameter akzeptiert:
%Vor% Nun wird das zweite Argument User(thinkTime: 10.0)
von der
Compiler in einen Abschluss, und der Abschluss wird für jeden ausgeführt
Array-Index.
Update für Swift 3:
%Vor%Tags und Links arrays initialization swift instance instantiation