u16suzuの blog

u16suzu のブログです。

swiftのディープコピー

swift はデフォルトで deep copyになる。 また、引数で受け取ったオブジェクトはletになってて直接加工できない。 そのため、ディープコピーを作ってそれを編集する必要がある。

// swift はデフォルトで deep copyになる
let ar = [1,2,3,4]

var ar2 = ar

ar2.insert(99, atIndex: 1)

print( ar, ar2)
// => [1, 2, 3, 4] [1, 99, 2, 3, 4]



// swiftでは引数で受け取ったオブジェクトを加工できない
func myInsert( ar:Array<Int> ) -> Array<Int>{
    var a = ar // いったんディープコピーする必要がある
    a.insert(55, atIndex: 1)
    return a
}


// let ar3 = [6,7,8,9]
var ar3 = [6,7,8,9]

print( myInsert(ar3) )
// => [6, 55, 7, 8, 9]
print(ar3)
// => [6, 7, 8, 9]