Я хочу создать объединение издателя / подписчика / подписки, которое ведет себя следующим образом:
struct Change<Value> {
let new: Value
let previous: Value?
}
let pub = PassthroughSubject<Int, Never>()
let cancellable = pub
.change()
.sink { (change: Change<Int>) -> Void in
print(change)
}
pub.send(1) // prints Change(new: 1, previous: nil)
pub.send(2) // prints Change(new: 2, previous: 1)
pub.send(3) // prints Change(new: 3, previous: 2)
Возникли проблемы с правильной реализацией. Я создал свой собственный Издатель / Подписку для обертывания внешних вызовов API и сортировки, но не могу найти правильную комбинацию, когда необходимо сохранить какое-то состояние, как предыдущее значение в этом примере (я думаю, это означает, что вам нужно пользовательский подписчик?)
Альтернативный синтаксис с той же семантикой также будет приемлем, если по какой-то причине синтаксис .change()
не работает.