3.1.0
This is the first release of ReactiveSwift 3.1. It supports Swift 3.2 and Swift 4.0.
Bugfix
-
Fixed a scenario of downstream interruptions being dropped. (#577, kudos to @andersio)
Manual interruption of time shifted producers, including
delay
,observe(on:)
,throttle
,debounce
andlazyMap
, should discard outstanding events at best effort ASAP.But in ReactiveSwift 2.0 to 3.0, the manual interruption is ignored if the upstream producer has terminated. For example:
// Completed upstream + `delay`. SignalProducer.empty .delay(10.0, on: QueueScheduler.main) .startWithCompleted { print("The producer should have been interrupted!") } .dispose() // Console(t+10): The producer should have been interrupted!
The expected behavior has now been restored.
Please note that, since ReactiveSwift 2.0, while the interruption is handled immediately, the
interrupted
event delivery is not synchronous — it generally respects the closest asynchronous operator applied, and delivers on that scheduler. -
Fixed
schedule(after:interval:leeway:)
being cancelled when the returnedDisposable
is not retained. (#584, kudos to @jjoelson)The issue affects only direct use of
QueueScheduler
.SignalProducer.timer
is not affected.