Оба PassthroughSubject
и CurrentValueSubject
являются издателями, которые соответствуют протоколу Subject
, что означает, что вы можете вызывать send
для них до pu sh новых значений по желанию.
Основной Разница в том, что CurrentValueSubject
имеет чувство состояния (текущее значение), а PassthroughSubject
просто передает значения непосредственно своим подписчикам, не запоминая «текущее» значение:
var current = CurrentValueSubject<Int, Never>(10)
var passthrough = PassthroughSubject<Int, Never>()
current.send(1)
passthrough.send(1)
current.sink(receiveValue: { print($0) })
passthrough.sink(receiveValue: { print($0) })
Вы увидите, что current.sink
вызывается немедленно с 1
. passthrough.sink
не вызывается, потому что у него нет текущего значения. Приемник будет вызываться только для значений, которые отправляются после подписки.
Обратите внимание, что вы также можете получить и установить текущее значение CurrentValueSubject
, используя его свойство value
:
current.value // 1
current.value = 5 // equivalent to current.send(5)
Это невозможно для проходного предмета.