4.0.0
This is the first release of ReactiveSwift 4.0. It requires Swift 4.1 or above.
Xcode 10 Support
Operators
- New method
collect(every:on:skipEmpty:discardWhenCompleted:)
which delivers all values that occurred during a time interval (#619, kudos to @Qata) debounce
now offers an opt-in behaviour to preserve the pending value when the signal or producer completes. You may enable it by specifyingdiscardWhenCompleted
as false (#287, kudos to @Qata)- New property operator:
filter
(#586, kudos to @iv-mexx) - New operator
merge(with:)
(#600, kudos to @ra1028) - New operator
map(value:)
(#601, kudos to @ra1028) SignalProducer.merge(with:)
,SignalProducer.concat
,SignalProducer.prefix
,SignalProducer.then
,SignalProducer.and
,SignalProducer.or
,SignalProducer.zip(with:)
,SignalProducer.sample(with:)
,SignalProducer.sample(on:)
,SignalProducer.take(until:)
,SignalProducer.take(untilReplacement:)
,SignalProducer.skip(until:)
,SignalProducer.flatMap
,SignalProducer.flatMapError
,SignalProducer.combineLatest(with:)
,Signal.flatMap
,Signal.flatMapError
,Signal.withLatest(from:)
andProperty.init(initial:then:)
now acceptSignalProducerConvertible
conforming types (#610, #611, kudos to @ra1028)
Changes: <~
Bindings
-
<~
bindings now works with optional left-hand-side operands. (#642, kudos to @andersio and @Ankit-Aggarwal)let nilTarget: BindingTarget<Int>? = nil // This is now a valid binding. Previously required manual // unwrapping in ReactiveSwift 3.x. nilTarget <~ notifications.map { $0.count }
Changes: Conditional Conformance
- For Swift 4.1 and above,
BindingSource
conformances are required to haveError
parameterized as exactlyNoError
. As a result,Signal
andSignalProducer
are now conditionallyBindingSource
. (#590, kudos to @NachoSoto and @andersio) - For Swift 4.1 and above,
Signal.Event
andActionError
are now conditionallyEquatable
. (#590, kudos to @NachoSoto and @andersio)
Interoperability
- Result now interoperates with SignalProducer n-ary operators as a constant producer (#606, kudos to @Qata)
Miscellaneous
- When unfair locks from libplatform are unavailable, ReactiveSwift now fallbacks to error checking Pthread mutexes instead of the default. Mitigations regarding issues with
pthread_mutex_trylock
have also been applied. (#654, kudos to @andersio) Lifetime
may now be manually ended usingLifetime.Token.dispose()
, in addition to the existing when-token-deinitializes semantic. (#641, kudos to @andersio)Bag
may now be initialised with a sequence of elements. (#609, kudos to @ra1028)- Non-class types may now conform to
ReactiveExtensionProvider
. (#636, kudos to @ra1028) - Fix some documentation errors about Carthage usage (#655)
- [CocoaPods] CocoaPods 1.4.0 is the minimum required version. (#651, kudos to @ikesyo)