2016-08-09 19 views
0

Das neue Array wurde selbst nennen append()Array Veränderlichkeit anhängen in Swift

In Xcode 7.3.1 ich diese Ergebnisse erhalten ein:

import Foundation 

var data = [[10]] 
var firstObject = data[0] 

print(unsafeAddressOf(firstObject)) 
firstObject.append(30) 
print(unsafeAddressOf(firstObject)) 
print("--------") 
print(firstObject) 
print(data) 
print("--------") 
data[0] = firstObject 
print(data) 

--output:-- 

0x000000015fdea8a0 
0x000000015fdea930 
-------- 
[10, 30] 
[[10]] 
-------- 
[[10, 30]] 

Ich versuche ändern Objekt in Array, aber Ich bin durchgefallen.

also, ich brauche data[0] = firstObject in array.append() jedes Mal laufen?

+1

zuweisen Warum Sie Speicheradresse drucken. Sie können Daten direkt an 'data [0] anhängen .append (30)' – Khundragpan

+2

Beachten Sie, dass 'unsafeAddressOf' * unbrauchbar * ist mit Werttypen (wie' firstObject', das ein 'Array' ist), siehe zum Beispiel http://stackoverflow.com/questions/32638879/swift-strings-and-memory-addresses. –

Antwort

1

Mit Ihrem Code, ja, Sie brauchen.

Swift Array ist Werttyp im Gegensatz zu Foundation NSArray, die Referenztyp ist.

Die Linie

var firstObject = data[0] 

erstellt eine Kopie des Objekts bei Index 0 von data und weist ihn der Variablen.

Die nächste Zeile

firstObject.append(30) 

anhängt 30 bis firstObject aber data unverändert bleibt.

data Sie aktualisieren müssen firstObject zurück zur Übersicht 0 von data