使用 Swift Combine 检测 NSMutableOrderedSet 中的变化

Detect change in NSMutableOrderedSet with Swift Combine

我正在尝试使用 combine 观察 ViewModel 中 NSMutableOrderedSet 的变化。 我想知道何时添加或删除 NSMutableOrderedSet

的某些元素

我的 ViewModel 的一些代码:

    class TrainingAddExerciceViewModel: ObservableObject {
        
        @Published var exercice: Exercice?
        @Published var serieHistories = NSMutableOrderedSet()
    
    ...
      init(...) {
        ...
        
//Where i'm trying to observe 
        $serieHistories
            .sink { (value) in
                print(value)
        }
        .store(in: &self.cancellables)
    }
    
    }

这是我在 ViewModel 中用来向 NSMutableOrderedSet 添加元素的函数:

func add(managedObjectContext: NSManagedObjectContext) {
        let newSerieHistory = ExerciceSerieHistory(context: managedObjectContext)
        self.serieHistories.add(newSerieHistory)
        self.updateView()
    }

我有一些其他发布商与其他类型(自定义 class)合作良好。

我是不是漏掉了什么?

如果我正确理解了您的代码逻辑,请尝试以下操作(init 不需要)

  1. 变体 1 - 添加强制更新

    func updateView() {

     // ... other code
    
     self.objectWillChange.send()
    

    }

  2. 变体 2 - 重新创建存储

func add(managedObjectContext: NSManagedObjectContext) {
        let newSerieHistory = ExerciceSerieHistory(context: managedObjectContext)
        let newStorage = NSMutableOrderedSet(orderedSet: self.serieHistories)

        newStorage.add(newSerieHistory)
        self.serieHistories = newStorage     // << fires publisher

        self.updateView()
    }