Обновление переменной, изменяющей пользовательский интерфейс из фонового потока - SWIFTUI

Как правильно уведомить основной поток о завершении операций фонового потока?

Теперь я получаю эту ошибку:

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
        }

person Hansy    schedule 21.07.2020    source источник


Ответы (2)


Попробуйте заменить self.isLoaded = true на

DispatchQueue.main.async { self.isLoaded = true }
person Stephan Boner    schedule 21.07.2020

Вы можете просто переложить эту работу обратно в основной поток:

self.createThumbnailOfVideoFromRemoteUrl()
DispatchQueue.main.async {
    self.isLoaded = true 
}
person Samuel-IH    schedule 21.07.2020