Так что я гораздо лучше знаком с RxSwift
, чем Combine
. Хороший способ управления изменяемыми / неизменяемыми интерфейсами заключается в том, что я делаю что-то подобное в RxSwift
protocol SampleStream {
/// An immutable interface.
var streamInfo: Observable<String?> { get}
}
protocol MutableSampleStream: SampleStream {
/// A mutable interface.
func updateStream( _ val: String?)
}
func SampleStreamImpl: MutableSampleStream {
// Returns the immutable version of the stream.
// If I pass down SampleStream as a dependency, then nothing else can write to this stream.
// When they subscribe, they immediately get a value though since it's a behavior subject.
var streamInfo: Observable<String?> {
return streamInfoSubject.asObservable()
}
private var streamInfoSubject = BehaviorSubject<String?>(value: nil)
func updateStream { }
}
Как я могу сделать что-то подобное, используя Combine
? У currentValueSubject
комбайна, похоже, нет способа привести его к нечитаемой версии записи. Или я что-то упустил?
В моем приложении я не хочу напрямую передавать currentValueSubject
, поскольку я точно знаю, что хочу, чтобы этот поток обновлялся только из одного места. В другом месте следует просто читать из потока и не иметь возможности записи.