无滞后地更新 ObservableObject 中的变量

我使用 objectWillChange 手动更新变量,因为我需要在后台更改变量以防止 UI 滞后。

通常,在主线程中追加、删除和更改 mainContent 变量会造成一些滞后。 检查下面的第二种方式。

谁能告诉我我走对了路吗?这是应该的吗?

//第一种方式 //没有任何滞后

class MyClass: ObservableObject {
    
    var mainContent = [Model]() {
        willSet{
            DispatchQueue.main.async {
                self.objectWillChange.send()
            }
        }
    }

init(){
    fetchItems()
}

func fetchItems(){
    DispatchQueue.global(qos: .userInitiated).async { [self] in
        let fetchedContents = NetworkRequest()
        for content in fetchedContents {
            //lots of append,remove,change iterations for mainContent
            mainContent[x] = bla bla bla
        }
        
    }
    
}

}

如果我这样做,主线程上会出现一点延迟。

//第二种方式

class MyClass: ObservableObject {
        
      @Published var mainContent = [Model]() 
    
    init(){
        fetchItems()
    }
    
    func fetchItems(){
        DispatchQueue.global(qos: .userInitiated).async { [self] in
            let fetchedContents = NetworkRequest()
            for content in fetchedContents {
                //lots of append,change iterations for mainContent
             DispatchQueue.main.async{
             // this places do some lags on the UI
                mainContent[x] = bla bla bla
              }
            }
            
        }
        
    }
    
}

感谢您的帮助!

taikongman19992289 回答:无滞后地更新 ObservableObject 中的变量

删除您的 willSet 并在循环后添加 self.objectWillChange.send()。这样,每个方法调用只有一次刷新,而循环的每次迭代都只有一次刷新。

本文链接:https://www.f2er.com/2258.html

大家都在问