【Swift】カスタムクラスの配列をDeepCopyする方法

カスタムクラスの配列をDeepCopyする方法をメモ。

そもそもディープコピーって何だろう。

まずは浅いコピーの説明から入ろう。

class MyClass{
    var hoge = ""
}

var a:[MyClass] = [MyClass()]
var b:[MyClass]

b = a

b[0].hoge = "something write"

print(a[0].hoge)

bに入れた値なのに、aの中身も書き換わっているから、”something write”が出力される。

これが浅いコピー。

浅いコピーでは元のデータも変わってしまう。

これを防ぐには、ディープコピーが必要になる。

ディープコピーの実装方法は以下のサイトが参考になった。

プロトコルを作ってカスタムクラスに準拠させることで実装できる。

https://stackoverflow.com/questions/32357060/deep-copy-for-array-of-objects-in-swift

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog