Swift 6:无法从非隔离上下文引用 Actor 隔离的实例方法

问题描述 投票:0回答:1

我需要在 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 macos actor
1个回答
0
投票

我很好奇,你在 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 解决方案不适合的情况(无法从全局上下文调用异步函数),并且初始化后完成的额外操作可以异步调用。

© www.soinside.com 2019 - 2024. All rights reserved.