使用 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 - 添加强制更新
func updateView() {
// ... other code
self.objectWillChange.send()
}
变体 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()
}
我正在尝试使用 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 - 添加强制更新
func updateView() {
// ... other code self.objectWillChange.send()
}
变体 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()
}