Skip to content

Releases: ReactiveCocoa/ReactiveSwift

6.2.1

28 Feb 12:40
Compare
Choose a tag to compare

This is a patch release of ReactiveSwift 6.2.

Changes

  • Improved performance of aggregating a sequence of Signal and SignalProducer using the static combineLatest and zip operators. (#773, kudos to @rocketnik)

  • Fixed the SignalProducer.debounce operator which does not deliver any value if having been started more than once. (#772, kudos to @gpambrozio)

6.2.0

07 Jan 13:37
Compare
Choose a tag to compare

Changes

  1. FlattenStrategy.throttle is introduced. (#713, kudos to @inamiy)

    Given a first inner stream, all subsequent inner streams sent by the upstream would be dropped until the first inner stream has completed. The whole process repeats indefinitely until the upstream terminates. The behavior is akin to throttle(_:on:) except for operating in the domain of streams instead of time.

  2. The package file of ReactiveSwift now declares supported platforms. (#761, kudos to @ikesyo)

  3. Renamed filterMap to compactMap and deprecated filterMap (#746, kudos to @Marcocanc)

6.1.0

20 Jun 12:24
b772fa0
Compare
Choose a tag to compare
  1. Support Swift 5.1 and Xcode 11 (#739, thanks @NachoSoto!)

  2. Add all and any operators with array of arguments (#735, kudos to @olejnjak)

    let property = Property.any([boolProperty1, boolProperty2, boolProperty3])
  3. Fixed Result extensions ambiguity (#733, kudos to @nekrich)

  4. Add <~ binding operator to Signal.Observer (#635, kudos to @Marcocanc)

6.0.0

11 Apr 12:25
3eba2b4
Compare
Choose a tag to compare

This release drops support for Swift 4.2 (Xcode 10/10.1) and removes the dependency on antitypical/Result. 🎉 (#702, kudos to @NachoSoto and @mdiep)

Upgrade to 6.0.0

  • If you have used Result only as dependency of ReactiveSwift, remove all instances of import Result, import enum Result.NoError or import struct Result.AnyError and remove the Result Framework from your project.
  • Replace all cases where NoError was used in a Signal or SignalProducer with Never
  • Replace all cases where AnyError was used in a Signal or SignalProducer with Swift.Error

5.0.1

31 Mar 23:19
c37950d
Compare
Choose a tag to compare

This release requires Swift 4.2 or above.

Fix the warnings in Xcode 10.2.

5.0.0

14 Mar 12:39
e285cea
Compare
Choose a tag to compare

This is the first release of ReactiveSwift 5.0. It requires Swift 4.2 or above.

Xcode 10.2 Support

  1. Swift 5.0 and Xcode 10.2 support (#707 and #711, kudos to @ChristopherRogers and @ikesyo)

Operators

  1. New operator materializeResults and dematerializeResults (#679, kudos to @ra1028)

Miscellaneous

  1. New convenience initializer for Action that takes a ValidatingProperty as its state (#637, kudos to @Marcocanc)

4.0.0

17 Jul 20:47
Compare
Choose a tag to compare

This is the first release of ReactiveSwift 4.0. It requires Swift 4.1 or above.

Xcode 10 Support

  1. Swift 4.2 and Xcode 10 support (#644, kudos to @ikesyo)

Operators

  1. New method collect(every:on:skipEmpty:discardWhenCompleted:) which delivers all values that occurred during a time interval (#619, kudos to @Qata)
  2. debounce now offers an opt-in behaviour to preserve the pending value when the signal or producer completes. You may enable it by specifying discardWhenCompleted as false (#287, kudos to @Qata)
  3. New property operator: filter (#586, kudos to @iv-mexx)
  4. New operator merge(with:) (#600, kudos to @ra1028)
  5. New operator map(value:) (#601, kudos to @ra1028)
  6. 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:) and Property.init(initial:then:) now accept SignalProducerConvertible conforming types (#610, #611, kudos to @ra1028)

Changes: <~ Bindings

  1. <~ 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

  1. For Swift 4.1 and above, BindingSource conformances are required to have Error parameterized as exactly NoError. As a result, Signal and SignalProducer are now conditionally BindingSource. (#590, kudos to @NachoSoto and @andersio)
  2. For Swift 4.1 and above, Signal.Event and ActionError are now conditionally Equatable. (#590, kudos to @NachoSoto and @andersio)

Interoperability

  1. Result now interoperates with SignalProducer n-ary operators as a constant producer (#606, kudos to @Qata)

Miscellaneous

  1. 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)
  2. Lifetime may now be manually ended using Lifetime.Token.dispose(), in addition to the existing when-token-deinitializes semantic. (#641, kudos to @andersio)
  3. Bag may now be initialised with a sequence of elements. (#609, kudos to @ra1028)
  4. Non-class types may now conform to ReactiveExtensionProvider. (#636, kudos to @ra1028)
  5. Fix some documentation errors about Carthage usage (#655)
  6. [CocoaPods] CocoaPods 1.4.0 is the minimum required version. (#651, kudos to @ikesyo)

4.0.0 Release Candidate 2

14 Jun 21:39
Compare
Choose a tag to compare
Pre-release

This is the second release candidate of ReactiveSwift 4.0. It requires Swift 4.1 or above.

Change

  1. Swift 4.2 and Xcode 10 support (#644, kudos to @ikesyo)

4.0.0 Release Candidate 1

01 Jun 16:28
Compare
Choose a tag to compare
Pre-release

This is the first release candidate of ReactiveSwift 4.0. It requires Swift 4.1.

Operators

  1. New method collect(every:on:skipEmpty:discardWhenCompleted:) which delivers all values that occurred during a time interval (#619, kudos to @Qata)
  2. debounce now offers an opt-in behaviour to preserve the pending value when the signal or producer completes. You may enable it by specifying discardWhenCompleted as false (#287, kudos to @Qata)
  3. New property operator: filter (#586, kudos to @iv-mexx)
  4. New operator merge(with:) (#600, kudos to @ra1028)
  5. New operator map(value:) (#601, kudos to @ra1028)
  6. 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:) and Property.init(initial:then:) now accept SignalProducerConvertible conforming types (#610, #611, kudos to @1028)

Changes: Conditional Conformance

  1. For Swift 4.1 and above, BindingSource conformances are required to have Error parameterized as exactly NoError. As a result, Signal and SignalProducer are now conditionally BindingSource. (#590, kudos to @NachoSoto and @andersio)
  2. For Swift 4.1 and above, Signal.Event and ActionError are now conditionally Equatable. (#590, kudos to @NachoSoto and @andersio)

Interoperability

  1. Result now interoperates with SignalProducer n-ary operators as a constant producer (#606, kudos to @Qata)

Miscellaneous

  1. Lifetime may now be manually ended using Lifetime.Token.dispose(), in addition to the existing when-token-deinitializes semantic. (#641, kudos to @andersio)
  2. Bag may now be initialised with a sequence of elements. (#609, kudos to @ra1028)
  3. Non-class types may now conform to ReactiveExtensionProvider. (#636, kudos to @ra1028)

3.1.0

11 Jan 20:05
Compare
Choose a tag to compare

This is the first release of ReactiveSwift 3.1. It supports Swift 3.2 and Swift 4.0.

Bugfix

  1. Fixed a scenario of downstream interruptions being dropped. (#577, kudos to @andersio)

    Manual interruption of time shifted producers, including delay, observe(on:), throttle, debounce and lazyMap, 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.

  2. Fixed schedule(after:interval:leeway:) being cancelled when the returned Disposable is not retained. (#584, kudos to @jjoelson)

    The issue affects only direct use of QueueScheduler. SignalProducer.timer is not affected.

Addition

  1. SignalProducer.concat now has an overload that accepts an error. (#564, kudos to @nmccann)

Change

  1. Fix some documentation errors (#560, kudos to @ikesyo)