2017-05-11 5 views
1

私はちょうどそれを学び始めています。私は、迅速な純粋なオブジェクト指向の言語であり、すべてのものが迅速であれば私の心を殺しているのか疑いがあります。オブジェクトiはアドレス/ポインタをvar型で割り当てる

var aValue = 2 //step 1 
var bValue = 5 //step 2 

を作成する場合に、それらの対応を保持する変数a、bは参照として扱われるべき意味Intタイプの2及び5値ので、この後、私はステップのように

aValue = bValue //step 3 
aValue = 0 //step 4 

を作成する場合-3 bValueのステートメントアドレスは変数aValueに割り当てられ、h ereby aValueとbValueの両方が同じオブジェクトを指している必要があります(たとえば、これがjavaで記述されている場合は )。aValueの各操作はbValueに影響するはずです(同じオブジェクトを指しているため)。bValueは値0すなわちaValue = 0bValue = 0が手順4の後で実際にはbValueのオブジェクトがaValueにコピーされ、互いに独立して処理されているので、どうして起こったか

誰でもこれを説明できます!スウィフトは

+2

※「迅速なものはすべてオブジェクト」* - どこから取得しましたか?私はSwift言語リファレンスの "A Swift Tour"と "Classes and Structures"を読むことをお勧めします。 –

+0

Javaはプリミティブ型のようには機能しません。 – Sulthan

+0

スウィフト(またはJava)オブジェクトでも、記述方法が振る舞いません。同じオブジェクトへの参照が2つあり、それらの参照のうちの1つに他の参照を割り当てると、もう1つは魔法のように同じオブジェクト。 *異なる*オブジェクトを指し示します。あなたがC++の参考資料を考えているように思えます。 – Hamish

答えて

0

チェックApple Documentation

、そのような文字列、配列、および辞書 など、多くの基本データ型は、構造体として実装されています。これは、文字列、 配列、および辞書などのデータが、新しい 定数または変数に割り当てられたとき、またはそれらが関数またはメソッドに渡されたときにコピーされることを意味します。

この動作はFoundation:NSString、NSArray、および とは異なります。NSDictionaryは構造体ではなくクラスとして実装されています。文字列、 配列、およびFoundation内の辞書は常にコピーとしてではなく、既存のインスタンスへの参照として割り当てられ、 が渡されます。

0

スウィフトには2種類あります。参照型および値型あなたはそれらについてここで読むことができますhttps://developer.apple.com/swift/blog/?id=10しかし、要するに、intsは値の型であり、書き込み時にコピーされるので、bvalueの値をavalueに代入すると、bvalueはコピーされ、2つの変数は依然として '独立'です。

0

Swiftには、値型と参照型があります。一般に、構造体は値型ですが、クラスは参照型です。 Swiftのほとんどのプリミティブ型、例えばIntは構造体を使って実装されているため、これらは値型です。 値型と参照型については、official blog postを参照してください。

0
var aValue = 2 //step 1 
var bValue = 5 //step 2 

両方の変数が値型と呼ばれています。これは両方とも固有のメモリアドレスを持ち、値を誰かに変更してもすべてに影響しません。

aValue = bValue //step 3 - bValue is copied to aValue 
aValue = 0 //step 4 - Changes aValue, not bbValue 
関連する問題