26851

[code]

    var itemsArray = [[Item]]()
    
[/code]

と定義して、

[code]

    let items = itemsArray.last
    items.removeLast()
    let item = newItemWithImage(image as! UIImage)
    items.append(item!)
    print(itemsArray.last) //反映されない
    
[/code]

とすると、`itemsArray`の要素に追加したitemが`itemsArray`に反映されません。

代わりに、

[code]

    let items = itemsArray.last
    items.removeLast()
    item = newItem(image as! UIImage)
    itemsArray.removeLast
    itemsArray.append(items) //挿入しなおす
    print(itemsArray.last) //反映される
    
[/code]

とすると反映されます。

Arrayの要素であるArrayは「参照型ではない」と理解して良いのでしょうか？


CC BY-SA 3.0
2016-06-19T05:01:11.290
26849
2016-06-19T05:22:15.300
12297
question
swift xcode
Arrayの要素であるArrayは参照型ではないのですか？


_Arrayの要素であるArrayは「参照型ではない」と理解して良いのでしょうか？_  
はい。もう少し言うと、Arrayの要素であるかどうかにかかわらず、Arrayは参照型ではありません。

さらに若干補足しておくと、SwiftのArrayは、内部表現的には`NSArray`やそれに似た何かへの参照を保持していることもありますが、たとえ多重配列になった場合でも「値型」として振る舞うように巧妙にwrapされています。

Swift3では、さらにObjective-
Cのデータ型(参照型)からブリッジされる値型が多数導入されます。(NSDataに対応するData型など。)それらも、たとえArrayの要素になっていても、値型として振る舞います。


CC BY-SA 3.0
2016-06-19T05:22:15.300
26851
2016-06-19T05:22:15.300
13972
26849
answer