为什么改变演员的nonSendable属性是合法的?

以下代码在 Swift 5.5(测试版)中是合法的:

class Dog {
    var name = "rover"
    var friend : Dog? = nil
}
actor MyActor {
    let dog = Dog()
}
func test() async {
    let act = MyActor()
    act.dog.name = "fido"
    act.dog.friend = Dog()
    act.dog.friend?.name = "fido"
}

为什么这是合法的?dog 属性是共享状态,不是吗?我们不是有同时在不同线程上访问演员的狗的危险吗?这不是演员应该保护我们的吗?

奇怪的是,如果演员的dog属性是用var而不是声明的let,我们将不得不await在访问期间说出来。为什么会有所不同?Dog 是一个引用类型;它就地可变,并且无论是否用let或声明,它都以完全相同的方式可变var

以上是为什么改变演员的nonSendable属性是合法的?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>