2016-11-19 6 views
-1

オブジェクトのインスタンスを作成するとき、プロパティを別の変数に割り当てるとプロパティの設定に問題があります。Swift 3の参照

例:ネストされたオブジェクトを含むオブジェクトの場合、私は、子のうちの1人を一時的なvarに割り当てて、使いやすくする必要があります。

の代わりにこれをやって(これは動作します):

myObj.myChildObject[0].someOtherChild[0].property = "something" 

私がやろうとしている:

var t = myObj.myChildObject[0].someOtherChild[0] 
t.property = "something" 
// this doesn't throw an error but doesn't change the value of myObj 

できますか?

編集>

は、ここで説明するために不自然な例です:だからVARにクラスのインスタンスを割り当てる

class Car { var name: String = "" } 

var merc = Car() 
var obj = merc.name 

merc.name = "C63 AMG" 
obj = "E300" 

print("merc.name: \(merc.name)") // prints merc.name: C63 AMG 
print("obj.name: \(obj)") // prints obj.name: E300 

var ob2 = merc 
ob2.name = "Toyota" 
print("ob2.name: \(ob2.name)") // prints ob2.name: Toyota 
print("merc.name: \(merc.name)") // prints merc.name: Toyota 

は、参照を作成します。しかし、そのオブジェクトのプロパティを別のvarに割り当てるとコピーが作成されますか?

私は「objの構造体、列挙型かタプルではないので、それは参照型ではないでしょうか?

+1

編集あなたの質問 'myChildObj'と' someOtherChild'と、誰かがあなたを助けることができるかもしれない、 'myObj'の種類を示すために議論されています。 – CRD

答えて

-1
https://developer.apple.com/swift/blog/?id=10を読んで、まだそれを得ることはありません:(

上記で

myObj.myChildObject[0].someOtherChild[0]が値型(すなわち、厳密な、直接列挙またはタプル)であれば、それはtへの割り当て時にコピーされるのに。tのその後の変異が唯一のそのコピーを変異させて、元のインスタンスは変更されません。

あなたはしなければなりませんtを再度割り当て:

var t = myObj.myChildObject[0].someOtherChild[0] 
t.property = "something" 
myObj.myChildObject[0].someOtherChild[0] = t 

これはthe Swift language guide.

+0

ありがとうアレクサンダー。私はちょうどここで値と​​参照型を読んでいました:https://developer.apple.com/swift/blog/?id=10そして参照型は同じオブジェクトへの参照をコピーします、 m後。 上記のケースでは、配列内のオブジェクトは構造体ではなくカスタムクラスです。 私は何を誤解していますか? – nugget

+0

まあ、私は、これらの構造物/物が何であるかを示さなかったので、私が言うことができるとあなたが何を期待しているのかは分かりません – Alexander

+2

申し訳ありませんが、これは間違っています。 *参照型は代入時にコピーされません、* value *型はコピーされません。 – CRD

関連する問題