如何在ReactiveSwift中中断SafeSignal?

时间:2018-03-09 08:53:13

标签: iphone swift cocoa-touch reactive-cocoa reactive-swift

嗨,我是反应迅速的新手。在我的新项目中,我正在使用ReactiveSwift。我通过使用SafeSignal变量来观察价值。我想在获取值之前中断信号。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

一般情况下,当您observeSignal start SignalProducer时,您将获得Disposable

这可以用来结束观察:

let property = MutableProperty<Int>(0)
let signalDisposable = property.signal.observeValues {
  print("Signal: \($0)")
}

let producerDisposable = property.producer.startWithValues {
  print("Producer: \($0)")
}


property.value = 1            // Signal and Producer receive value 1
signalDisposable?.dispose()   // End signal observation
property.value = 2            // Only producer receives value 2
producerDisposable.dispose()  // End producer observation
property.value = 3            // No one receives value 3

取消正在运行的工作

如果您为某些(更长时间)的工作创建自己的SignalProducer,那么您必须牢记处理以停止正在进行的工作:

let performNetworkCall = SignalProducer<Data, Error> { (observer, disposable) in
  let url = URL(string: "https://www.download.com")!
  let downloadTask = URLSession.shared.dataTask(with: url, completionHandler: { (data, _, error) in
    // Handle completion
  })
  downloadTask.resume()
  disposable.observeEnded {
    // Cancel the download on disposal!
    downloadTask.cancel()
  }
}

否则,您的观察者将被分离,但观察者开始的工作仍将继续