小编Arj*_*jan的帖子

在并发执行的代码中使用对捕获变量的引用

更新2:我怀疑这个问题因为我描述的可能的解决方案而被投票。为了清楚起见,突出显示了它。

更新1:这个问题得到了很多人的关注。如果您认为可以通过您自己遇到错误的情况来增强问题,请在评论中简要描述您的情况,以便我们可以使此问答更有价值。如果您对您的问题版本有解决方案,请将其添加为答案。


Task.detached我想在使用和函数执行异步后台工作后更新 UI async

但是,我在构建过程中收到构建错误错误Reference to captured var 'a' in concurrently-executing code

我尝试了一些方法,在更新 UI 之前将变量转换为 alet constant是唯一有效的方法。为什么我需要先创建一个 let 常量才能更新 UI?还有其他选择吗?

class ViewModel: ObservableObject {
    
    @Published var something: String?
    
    init() {
        Task.detached(priority: .userInitiated) {
            await self.doVariousStuff()
        }
    }
    
    private func doVariousStuff() async {
        var a = "a"
        let b = await doSomeAsyncStuff()
        a.append(b)
        
        something = a /* Not working,
        Gives
           - runtime warning `Publishing changes from 
           background threads is …
Run Code Online (Sandbox Code Playgroud)

async-await swift5 swiftui

41
推荐指数
2
解决办法
4万
查看次数

标签 统计

async-await ×1

swift5 ×1

swiftui ×1