Swift: Erstellen eines Arrays mit einem Standardwert von verschiedenen Objektinstanzen

9

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

beschrieben
  

Der 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)?

    
Franco Rondini 03.10.2015, 10:20
quelle

1 Antwort

18

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%     
Martin R 03.10.2015, 10:29
quelle