swift关于struct实现协议的一个问题

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了?

阅读 2.8k
3 个回答

如果使用 struct 则 var object = obj 发生一次拷贝,而 class 只是引用计数加一,所以这里会是false

新手上路,请多包涵

var object = obj
object.doSomething()
改成
obj.doSomething()

试试呢

楼主你好,我有个问题想请教你,
`

enum Season : CaseIterable {
    case s1, s2, s3
}

`
为什么有的枚举、结构体,在实现协议时,体内可以不必写出协议规定的方法呢?这是什么语法,谢谢!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进