我需要在 Actor 中设置字典。当我尝试下面的代码时,我得到一个 Actor 隔离的实例方法,不能从非隔离的上下文中引用。
actor SimpleActor
{
var myDict: [Int: String] = [:]
init()
{
myDict = loadDict()
}
func loadDict() -> [Int: String]
{
var d: [Int: String] = [:]
for i in 1...10
{
d[i] = "\(i)"
}
return d
}
}
有更好的方法吗?
我很好奇,你在 Swift 论坛上看到过这篇帖子吗?他们建议您只需将
init
设为异步函数即可。
如果您拨打
loadDict
的时间并不重要,您也可以这样做:
actor SimpleActor
{
var myDict: [Int: String] = [:]
init()
{
// Do this only if you don't need myDict to be populated immediately
// after init() is called
Task { await loadDict() }
}
func loadDict()
{
myDict = [:]
for i in 1...10
{
myDict[i] = "\(i)"
}
}
}
我提到这种替代方法只是因为我遇到了 Swift Forum 解决方案不适合的情况(无法从全局上下文调用异步函数),并且初始化后完成的额外操作可以异步调用。