2016-08-11 17 views
1

構造体にオブジェクトを含む関数がある場合、構造体は値の意味を保持しますか?例:Swiftの関数、構造体、および値のセマンティクス

struct MyStruct { 
    var x = 3 

    func setX() { 
     let y = NSNumber(value: 2) 
     x = y.intValue 
    } 
} 

構造体には参照を持つメンバがないため、値のセマンティクスが必要です。関数setX()に参照メンバyがあるという事実により、MyStructは参照セマンティクスを使用しますか?

+3

私はここに質問が表示されません。 「価値セマンティクスを維持する」があまりにも曖昧です –

+2

MyIntClassWrapperとは何ですか?関数の構文が間違っています。 - 期待された出力と実際の出力を持つ、自己完結型のコンパイル可能な例が役に立ちます。 –

+2

これは、REPLまたは遊び場での調査が非常に簡単です。私はあなた自身を見てから、より正確にターゲットを絞った質問に戻ってくることをお勧めします。 –

答えて

0

mutatingの構造体は、他の構造体と同じ値セマンティクスを保持します。

setXを呼び出すと、(参照型と同じように)共有インスタンスではなく、コピーされた別個のインスタンスになるため、呼び出されたインスタンスは変更されます。

あなたはthis exampleに自分で見ることができます。

struct Counter { 
    var count: Int 

    mutating func increment() { 
     count += 1 
    } 
} 

var x = Counter(count: 0) 
let y = x // a copy is made 

print("x: \(x)") // x: Counter(count: 0) 
print("y: \(y)") // y: Counter(count: 0) 

x.increment() 

print("x: \(x)") // x: Counter(count: 1), method target affected 
print("y: \(y)") // y: Counter(count: 0), copy unaffected 
関連する問題