Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update a variable that changes the UI from background thread - SWIFTUI

What is the correct way to notify the main thread, that the background-thread operations are finished?

I get this error now:

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.

Here is where i make the background-queue-operations:

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
        }
like image 513
Hansy Avatar asked Apr 22 '26 10:04

Hansy


1 Answers

Try to replace the self.isLoaded = true with

DispatchQueue.main.async { self.isLoaded = true }
like image 161
Stephan Boner Avatar answered Apr 25 '26 02:04

Stephan Boner