カスタムクラスの配列を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