我有一个演员是这样的:我想从NewsCache执行元向ViewController分配一个值,但它给出了以下错误:
主操作元隔离属性“cache_data”不能从可发送闭包中变化
actor NewsCache {
var current_news_on_fetch : [String:Bool] = [:]
var news_dict : [String:NewsFeedPageStruct] = [:]
var time_dict_news : [String:String] = [:]
var ordered_uuid_news : [String] = []
}
class ViewController : UIViewController {
var cache_data : [String : NewsFeedPageStruct] = [:]
var actor_news = NewsCache()
func setData(){
print("Below is the problem")
Task.detached { [self] in
self.cache_data = await self.actor_news.get_uuids()//this is the line which produces the error
await self.reloadSnapshot(hash_news: str_arr.0) //this is in the MainActor
}
}
}
1条答案
按热度按时间fbcarpbf1#
你可以使用
MainActor.run
在主参与者上运行闭包,但是MainActor.run
需要一个同步(非async
)闭包,所以你需要在调用MainActor.run
之前调用get_uuids
:另一个解决方案是将对
cache_data
的赋值封装在一个立即执行的@MainActor
绑定闭包中: