protocol OperationAble {
mutating func doSomething()
}
struct User: OperationAble {
var isMove: Bool = false
mutating func doSomething() {
print("user")
isMove = true
}
}
struct PerPle: OperationAble {
var isMove: Bool = false
mutating func doSomething() {
print("perple")
isMove = true
}
}
struct CustomObject {
func operation(obj: OperationAble) {
var object = obj
object.doSomething()
}
}
let customObj = CustomObject()
let user = User()
customObj.operation(obj: user)
print(user.isMove)
在var object = obj中由于发生了一次拷贝,从而实际执行的是object的doSomething,所以最终user.isMove还是false。
在这种场景中是不是只能用class而不是struct了?
如果使用 struct 则 var object = obj 发生一次拷贝,而 class 只是引用计数加一,所以这里会是false