从另一个 CurrentValueSubject 创建一个 CurrentValueSubject
Create a CurrentValueSubject from another CurrentValueSubject
我在一个对象中有一个 CurrentValueSubject
,我想要另一个 CurrentValueSubject
来复制第一个对象的更改。
我找不到一种方法可以轻松地做到这一点,而不必像这样做:
subjectA.assign(to: \.value, on: subjectB).store(in: &cancelables)
如果能够使用 subjectA
初始化 subjectB
就好了。有没有办法做这样的事情?
编辑:
例如,我认为能够做类似的事情会很棒:
let subjectB = CurrentValueSubject(from: subjectA)
我只想让第二个发布者成为第一个发布者的订阅者。示例:
let pub1 = CurrentValueSubject<String,Never>("howdy")
lazy var pub2 : AnyPublisher<String,Never> = {
self.pub1.eraseToAnyPublisher()
}()
用法示例:
pub1.sink {print([=11=])}.store(in: &storage)
pub2.sink {print([=11=])}.store(in: &storage)
delay(1) {
self.pub1.send("hey")
delay(2) {
self.pub1.send("ho")
}
}
输出:
howdy
howdy
[delay]
hey
hey
[delay]
ho
ho
所以两个发布商都给出了相同的值,这似乎是你想要的。
我在一个对象中有一个 CurrentValueSubject
,我想要另一个 CurrentValueSubject
来复制第一个对象的更改。
我找不到一种方法可以轻松地做到这一点,而不必像这样做:
subjectA.assign(to: \.value, on: subjectB).store(in: &cancelables)
如果能够使用 subjectA
初始化 subjectB
就好了。有没有办法做这样的事情?
编辑: 例如,我认为能够做类似的事情会很棒:
let subjectB = CurrentValueSubject(from: subjectA)
我只想让第二个发布者成为第一个发布者的订阅者。示例:
let pub1 = CurrentValueSubject<String,Never>("howdy")
lazy var pub2 : AnyPublisher<String,Never> = {
self.pub1.eraseToAnyPublisher()
}()
用法示例:
pub1.sink {print([=11=])}.store(in: &storage)
pub2.sink {print([=11=])}.store(in: &storage)
delay(1) {
self.pub1.send("hey")
delay(2) {
self.pub1.send("ho")
}
}
输出:
howdy
howdy
[delay]
hey
hey
[delay]
ho
ho
所以两个发布商都给出了相同的值,这似乎是你想要的。