斯威夫特,演员:演员隔离属性“扫描”不能从非隔离上下文中变异
Posted
技术标签:
【中文标题】斯威夫特,演员:演员隔离属性“扫描”不能从非隔离上下文中变异【英文标题】:Swift, actor: Actor-isolated property 'scanning' can not be mutated from a non-isolated context 【发布时间】:2021-11-14 10:55:33 【问题描述】:我有一个演员:
actor StatesActor
var job1sActive:Bool = false
...
我有一个使用该演员的对象:
class MyObj
let myStates = StatesActor()
func job1() async
myStates.job1IsActive = true
行:
myStates.job1IsActive = true
出现此错误的错误:
Actor-isolated property 'job1IsActive' can not be mutated from a non-isolated context
如何使用actor正确存储/读取状态信息,以便MyObj可以使用它来读取和设置状态?
【问题讨论】:
在你的actor中创建一个更新属性的函数。然后MyObj
应该调用该函数。
【参考方案1】:
如何使用actor正确存储/读取状态信息,以便MyObj可以使用它来读取和设置状态?
你不能从actor外部改变actor的实例变量。这就是演员的全部意义!
相反,给演员一个方法 来设置它的自己的 实例变量。然后您就可以调用该方法(使用await
)。
【讨论】:
真的。我需要将它包装在 StatesActor 中的一个方法中......谢谢。 演员基本上是在教你如何安全地使用多线程。 异步属性设置器在理论上是可行的。 Swift 还没有它们。以上是关于斯威夫特,演员:演员隔离属性“扫描”不能从非隔离上下文中变异的主要内容,如果未能解决你的问题,请参考以下文章