2016-12-26 8 views
1

ハッピーホリデー!構造体に設定されたVarは、変更時に本当に置き換えられますか?

ノイバーグの「iOS 10プログラミングの基礎」のp.147に悩まされました。彼の主張は、 "明らかに値型のインスタンスを変更すると、のインスタンスがと異なるのインスタンスをインスタンスに置き換えていることになります。

質問:これが当てはまる場合、なぜ私は新しいインスタンスが初期化されているのを見ませんか?

///////////////////// Slight modification from page 147 in Neuberg, 2016 edition 
struct Digit { 
    var number : Int 
    init(_ n:Int) { 
     self.number = n 
     print("number was set in the initializer to: \(n)") 
    } 
} 
var d : Digit = Digit(123) { 
    didSet { 
     print("didSet detected old: \(oldValue.number) to new: \(d.number)") 
    } 
} 
d.number = 42 
d.number = 56 

数に初期に設定したPrints--
:123
didSetの変化から検出:ドン

56にただ42:didSet 123
42への変化から検出これ以上参照しないでください。」数字が設定されました... "

答えて

0

交換することは、initを再度呼び出すことを意味しません。

概念的には、データをコピーして(変更する場合はnumberのように)データを変更(または変更)し、元のデータを変更したデータで置き換えることを意味します。

私はこの本を読んでいませんが、この点は、参照型と値型の区別を明確にするためのものです。値の型はコピーによって渡され、参照型は参照によって渡されます(つまりポインタを使用します)。

+0

ありがとうございました。私は、インスタンス化プロセスを経た別のインスタンスを少なくとも暗示していたという言い回し「私とは別のインスタンス」によって誤解されたと思います。 – JackyChan

+0

@ジャッキーチェン:右 - o! –

関連する問題