为什么改变演员的不可发送财产是合法的?

原学程将引见为何转变演员的弗成收送产业是正当的?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

为什么改变演员的不可发送财产是合法的? 教程 第1张

成绩描写

以下代码在SWIFT 五.五(尝试版)中是正当的:

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属性是用var而没有是let申明的,我们将自愿在拜访时代申明await。这有甚么分歧呢?Dog是1种援用典型;它是当场可变的,而且不管它是用let照样var申明的,它皆因此完整雷同的方法可变的。

推举谜底

您说患上对于,这类拜访是没有平安的,除非您显式传播-warn-concurrency标记,不然SWIFT 五.五今朝没有会阻拦这类拜访。

请参照Staging in Sendable checking计划(以及forums post评论辩论检讨功效的展启筹划)。

您借不妨在以下道路图革新中懂得SWIFT 五.五以及SWIFT 六中有闭并收平安的整体筹划:Concurrency in Swift 五 and 六。

佳了闭于为何转变演员的弗成收送产业是正当的?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。