0

Swift で非常に奇妙な動作を見つけました。コードは次のとおりです。

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

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

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

最後の行が印刷されることを完全に期待しています[[1, 2]]。現在の行動を説明することはできません。array2d[0]最初のアイテムへの参照、またはその参照のコピーを返すことを期待しています。どちらの場合でも、そのオブジェクトを変更すると、変更する必要がありarray2dます。しかし、それは起こっていることではありません。

ただし、次のように配列を更新すると:

array2d[0].append(2)

次に[[1, 2]]、期待どおりに出力します。

誰かが私のためにこれを説明してもらえますか?

4

1 に答える 1

1

配列が迅速に参照/受け渡し/コピーされる方法は、多くの論争のポイントです。このリンクを見てください。

本質的に何が起こっているかというとvar first = array2d[0]、期待どおりに参照を作成するのではなく、そのインデックスで配列のコピーを取得しています。したがって、添え字表記を使用して配列にアクセスすると、配列を正しく変更できますが、新しい変数を作成することはできません。

于 2016-03-28T22:17:58.970 に答える