(Unter der Annahme, ich verstehe, was Sie für Fragen ....)
den folgenden Code auf einem Spielplatz Versuchen. Es sollte dreimal "99" gedruckt werden.
class Row {
var rowNumber = 0
}
var rows = [Row]()
let testRow = Row()
testRow.rowNumber = 1
rows.append(testRow)
let selectedRow = rows[0]
selectedRow.rowNumber = 99
print(testRow.rowNumber)
print(selectedRow.rowNumber)
print(rows[0].rowNumber)
Standardmäßig werden Objekte nicht als Teil einer Zuweisungsanweisung kopiert. Wenn es eine Struktur wäre, wäre das anders.
ein wenig auf Vollständigkeit Hinzufügen:
Wenn Sie einen ähnlichen Effekt mit skalaren Werten anstelle von Objekten wollen, liefert Swift verschiedene Arten von Wrapper.
let intPointer = UnsafeMutablePointer<Int>.allocate(capacity: 8) // Should be 1, not 8 according to comment re: docs
let other = intPointer
other.pointee = 34
print(intPointer.pointee)
(Warnung: Ich habe nicht diese Wrapper für alles außer Experimentieren auf einem Spielplatz verwendet Traue es nicht ohne einige der Forschung..)
Mögliches Duplikat [How "Deep Copy" in Swift zu tun?] (Https://stackoverflow.com/questions/24754559/how-to-do-deep-copy-in-swift) –
Have du hast es versucht? Wie funktioniert 'var selectedRow = rows [0]' nicht was du willst? (Aus Ihrer Beschreibung scheint mir, dass Sie überhaupt keine Kopie wollen, nur einen gemeinsamen Zeiger.) –
Er erstellt eine Kopie von 'rows [0]' aber die zwei Variablen sind unterschiedlich, wenn ich 'selectedRow 'modifiziere 'Es betrifft 'rows [0]' überhaupt nicht. Und ja, ich möchte einen geteilten Zeiger. – Drakalex