Swift中的函数,结构和值语义

时间:2016-08-11 19:34:39

标签: swift struct

如果struct有一个包含对象的函数,那么struct是否保留了值语义?示例:

struct MyStruct {
    var x = 3

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

struct没有任何带引用的成员,因此它应该具有值语义。函数setX()是否具有引用成员y这一事实是否会导致MyStruct使用引用语义?

1 个答案:

答案 0 :(得分: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