斯威夫特,演员:演员隔离属性“扫描”不能从非隔离上下文中变异

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 还没有它们。

以上是关于斯威夫特,演员:演员隔离属性“扫描”不能从非隔离上下文中变异的主要内容,如果未能解决你的问题,请参考以下文章

演员模型:一个演员需要来自另一个演员的信息

2-2 抓取银河演员网上的演员参演电影的信息进行抓取

OGNL探秘之二:数据乐园中的演员

Imdb上所有电影名称、演员、导演、作家的列表

开源java游戏框架libgdx专题-11-核心库-演员类

如何将杂波演员放置在杂波纹理上?