Swift: Erstellen eines Arrays mit einem Standardwert unterschiedlicher Objektinstanzen

Ich bemerkte ein bisschen komisch nd gefährlich IMHO) Verhalten inErstellen eines Arrays mit einem Standardwert. Wie angegeben inSwift 2.1: Sammlungsarten

er Array-Typ von @ Swift bietet auch einen Initialisierer zum Erstellen eines Arrays einer bestimmten Größe, bei dem alle Werte auf denselben Standardwert gesetzt sind. Sie übergeben diesem Initialisierer die Anzahl der Elemente, die dem neuen Array hinzugefügt werden sollen (als Anzahl bezeichnet), und einen Standardwert des entsprechenden Typs (als wiederholter Wert bezeichnet):

Der Punkt ist:same default value; Um zu verstehen, wie es funktioniert, habe ich versucht, ein Array von Elementen dieser Beispielklasse @ zu erstelle

class User {
  private struct Shared {
    static var sequence: Int = 0
  }

  var id: Int
  var thinkTime: NSTimeInterval // typealias di Double

  init (thinkTime: NSTimeInterval) {
    User.Shared.sequence = User.Shared.sequence+1
    id = User.Shared.sequence
    self.thinkTime = thinkTime
  }
}

und dieser Testcode:

let  howManyUsers: Int = 3
var users = [User](count: howManyUsers, repeatedValue:User(thinkTime: 10.0))
let u2: User = User(thinkTime: 10)
let u3: User = User(thinkTime: 10)
users.append(u2)
users.append(u3)
users[1].thinkTime = 20
users[3].thinkTime = 30

for u in users {
  print("User id:\(u.id) thinktime:\(u.thinkTime)")
}

gibt:

User id:1 thinktime:20.0     
User id:1 thinktime:20.0
User id:1 thinktime:20.0
User id:2 thinktime:30.0
User id:3 thinktime:10.0

dass der Initialisierer mit der Anzahl der Elemente, die zum neuen Array hinzugefügt werden sollen, und einem Standardwert des entsprechenden Typs definitiv überprüft werden kann, sind:die gleiche Objektinstanz

Welche Methode ist es, so präzise und intelligent wie möglich ein Array von @ zu erhalteunterscheidbare Objektinstanzen, instatiiert mit demselben Standardwert (nicht mit derselben Instanz, sondern mit einer Anzahl von Instanzen, die mit demselben Standardwert initialisiert wurden)?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage