2016-03-28 21 views
0

Swift'de gerçekten tuhaf bir davranış buldum. İşte kod:Swift öğesinde düzenleme öğeleri

var array2d: [[Int]] = [[1]] 
print(array2d) // prints [[1]] 

var first = array2d[0] 
first.append(2) 

print(array2d) // still prints [[1]]!!! 

Tamamen son satırı [[1, 2]] yazdırmak için beklenebilir. Mevcut davranışı açıklayamam. array2d[0]'un, ilk öğeye yapılan bir referansı veya bu referansın bir kopyasını göndermesini beklerdim. Her iki durumda da, bu nesneyi değiştirmek array2d'u değiştirmelidir. Ama olan bu değil. beklendiği gibi, daha sonra [[1, 2]] yazdırır

array2d[0].append(2) 

:

Ancak, böyle diziyi güncelleyin.

Birisi bunu benim için açıklayabilir mi?

cevap

1
Diziler arasında nasıl başvurulan/geçirilen/geçirilen hızlı bir çekişme noktası, this link'a bakın.

Esas olarak, beklediğiniz gibi bir referans oluşturmak yerine var first = array2d[0] dizininin bu dizindeki bir kopyasını almasıdır. Bu nedenle, dizine, gösterim gösterimi ile erişme, diziyi doğru bir şekilde değiştirmenize izin verir, ancak yeni bir değişken oluşturmaz.

+0

Başka bir deyişle, her şeyin derin bir kopyasını yapıyor? – Macondo2Seattle

İlgili konular