Swift `示例`在完成时触发。如何避免? let stream=PublishSubject() let trigger=PublishSubject() stream.sample(trigger.subscribeNext{打印中的值(“值\(值)”)} stream.onNext(5) trigger.onCompleted()

Swift `示例`在完成时触发。如何避免? let stream=PublishSubject() let trigger=PublishSubject() stream.sample(trigger.subscribeNext{打印中的值(“值\(值)”)} stream.onNext(5) trigger.onCompleted(),swift,reactive-programming,rx-swift,Swift,Reactive Programming,Rx Swift,上面的命令将“值5”打印到控制台。我觉得这很奇怪,因为我从未在触发器上调用onNext() 在我的例子中,触发器表示保存按钮rx\u点击,而流表示要保存的有效输入。我的问题是,当触发器完成时(销毁时),即使未点击,流也会被保存。好吧,sample确实会触发onCompleted 您可以在此处查找: 在您的情况下,它的效果与预期一样。 通常,当您在DisposeBag中添加observators时,它将在行李被处置时被处置。 例如:当ViewControllers或VIEWMODEL是deini

上面的命令将“值5”打印到控制台。我觉得这很奇怪,因为我从未在触发器上调用onNext()


在我的例子中,
触发器
表示保存按钮
rx\u点击
,而
表示要保存的有效输入。我的问题是,当触发器完成时(销毁时),即使未点击,流也会被保存。

好吧,
sample
确实会触发
onCompleted
您可以在此处查找:

在您的情况下,它的效果与预期一样。

通常,当您在
DisposeBag
中添加
observators
时,它将在行李被处置时被处置。
例如:当ViewControllers或VIEWMODEL是
deinit
ed时

因此,解决方案就是不要调用
onCompleted
来处理
观察者

let stream = PublishSubject<Int>()
let trigger = PublishSubject<Void>()

stream.sample(trigger).subscribeNext { value in print("value \(value)") }

stream.onNext(5)
trigger.onCompleted()
stream.sample(trigger)
      .subscribeNext { value in print("value \(value)") }
      .addDisposableTo(disposeBag)

stream.onNext(5)