2016-08-11 31 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