如果struct有一个包含对象的函数,那么struct是否保留了值语义?示例:
struct MyStruct {
var x = 3
func setX() {
let y = NSNumber(value: 2)
x = y.intValue
}
}
struct没有任何带引用的成员,因此它应该具有值语义。函数setX()
是否具有引用成员y
这一事实是否会导致MyStruct使用引用语义?
答案 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