In this example, each time sink fires, newValue contains Bool.
How to get [Bool] with states from all publishers each time it fires?
PS: .collect() before .sink makes it fire only once, that's not what I want, I don't want to stop observing
class SomePublisher: ObservableObject {
@Published var state: Bool
init(_ value: Bool) {
state = value
}
}
class Listener: ObservableObject {
var bucket: [AnyCancellable] = []
var publishers: [SomePublisher] = []
func addPublishers() {
publishers.append(.init(true))
publishers.append(.init(true))
publishers.append(.init(false))
publishers.append(.init(false))
}
func subscribe() {
Publishers.MergeMany(publishers.map{ $0.$state })
.sink { newValue in
print(newValue)
}
.store(in: &bucket)
}
}
let listener = Listener()
listener.addPublishers()
listener.subscribe()
listener.publishers[1].state = false
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
listener.publishers[0].state = false
}
Output:
true
true
false
false
false
false
Desired Output:
[true, true, false, false]
[true, false, false, false]
[false, false, false, false]