我创建了一个CurrentValueSubject
的版本,它不能像@Published
那样完成。但是,我想删除对.send(value)
的需求,并为这个类定义一个setter来执行它。这可能吗?
所以从这个:
customPublisher.send(newValue)
改为:
customPublisher = newValue
final class CustomPublisher<Output: Any>: Publisher {
typealias Failure = Never
var value: Output
private var wrapper: CurrentValueSubject<Output, Failure>
init(_ value: Output) {
self.value = value
wrapper = .init(value)
}
func send(_ value: Output) {
self.value = value
wrapper.send(value)
}
func send(subscription: Subscription) {
wrapper.send(subscription: subscription)
}
func receive<S>(subscriber: S) where S: Subscriber, Failure == S.Failure, Output == S.Input {
wrapper.receive(subscriber: subscriber)
}
}
1条答案
按热度按时间tyu7yeag1#
不能使用语法
customPublisher = newValue
来发布新值,因为在该语法中,您将一个(可能是全新的)发布者放入customPublisher
中。不过,你可以像
CurrentValueSubject
一样使customPublisher.value = newValue
工作,你需要用setter使value
成为一个计算属性,如下所示: