43578


いつもお世話になっております。

1つのインスタンスにてプロパティを編集し、処理前後でそのプロパティを比較したいと考えております。

変数コピーは値型なのでインスタンスを2つの変数にコピーし見比べようと思いました。  
ですがどうやらポインター自体をコピーするようで、処理前後で同じ値となってしまいました。  
解決方法をご教授頂けると幸いです。

そのプロパティを変数コピーし退避すればできそうですが、プロパティ数が多くインスタンスごと管理できたら楽と思いました。

何卒よろしくお願い致します。

サンプルコード

[code]

    class A {
        var p = "abc"
    }
    var origin: A = A()
    let keep = origin
    origin.p = "123"
    print(origin.p)  // 123
    print(keep.p)    // 123(こっちも処理が反映されてしまった！！)
    
[/code]


CC BY-SA 3.0
2018-04-23T21:16:58.267
43503
2018-04-26T12:53:22.440
20142
question
swift4
処理前後のインスタンスを参照したい


そのクラスにcopyメソッドを定義してあげれば良いと思います。  
具体的にはクラス定義を

[code]

    class A {
        var p = "abc"
    
        func copy() -> Any {
            let copy = A.init()
            copy.p = p
    
            return copy
        }// end define function copy
    }// end define class A
    
[/code]

と `copy`というメソッドの中で、一時的なインスタンスを生成し、生成したインスタンスの各メンバーに自身の値を書き替えて返してあげます。  
使い方は、

[code]

    var origin: A = A()
    print(origin.p)          // abc
    let keep = origin.copy()
    origin.p = "123"
    print(origin.p)          // 123
    print(keep.p)            // abc
    
[/code]

こうすることで、copyメソッドを定義するときは全メンバーの書き換えを行う必要がありますが  
インスタンスのコピー時には各メンバーのコピーを意識せずに使えるようになります。  
(Xcode 9.3のplaygroundで動作確認済みです)


CC BY-SA 3.0
2018-04-26T12:53:22.440
43578
2018-04-26T12:53:22.440
14745
43503
answer