从后台线程更新改变UI的变量 - SWIFTUI

3
什么是通知主线程后台线程操作完成的正确方式?
我现在遇到了这个错误:
Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.

这里是我进行后台队列操作的地方:

class ImageLoader: ObservableObject {
    //the thumbnail
    @Published var image: UIImage?

    //value to verify everything is loaded
    @Published var isLoaded = false
    
    
    private(set) var isLoading = false

    
    func load() {
        
        let dispatchQueue = DispatchQueue(label: "ThumbNailMaker", qos: .background)
        
        dispatchQueue.async {
            self.removeChar()
            self.createThumbnailOfVideoFromRemoteUrl()
            self.isLoaded = true     //<--------------------- Here the error appears
        }
2个回答

4
尝试用以下代码替换 self.isLoaded = true
DispatchQueue.main.async { self.isLoaded = true }

2
您可以将该工作简单地转移回主线程:
self.createThumbnailOfVideoFromRemoteUrl()
DispatchQueue.main.async {
    self.isLoaded = true 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接