Skip to content

Releases: ReactiveCocoa/ReactiveSwift

1.1.0

28 Feb 03:41
Compare
Choose a tag to compare

This is the first feature release of ReactiveSwift 1.x.

Additions

General

  1. New boolean operators: and, or and negated; available on Signal<Bool, E>, SignalProducer<Bool, E> and Property<Bool, E> types. (#160, kudos to @cristianames92)
  2. New operator filterMap. (#232, kudos to @RuiAAPeres)
  3. New operator lazyMap(on:_:). It coalesces value events when they are emitted at a rate faster than the rate the given scheduler can handle. The transform is applied on only the coalesced and the uncontended values. (#240, kudos to @liscio)
  4. New protocol BindingTargetProvider, which replaces BindingTargetProtocol. (#254, kudos to @andersio)

SignalProducer

  1. New initializer SignalProducer(_:), which takes a @escaping () -> Value closure. It is similar to SignalProducer(value:), but it lazily evaluates the value every time the producer is started. (#240, kudos to @liscio)

Lifetime

  1. New method Lifetime.observeEnded(self:). This is now the recommended way to explicitly observe the end of a Lifetime. Use Lifetime.ended only if composition is needed. (#229, kudos to @andersio)
  2. New factory method Lifetime.make(), which returns a tuple of Lifetime and Lifetime.Token. (#236, kudos to @sharplet)

Properties

  1. ValidatingProperty: A mutable property that validates mutations before committing them. (#182, kudos to @andersio).
  2. A new interactive UI playground: ReactiveSwift-UIExamples.playground. It demonstrates how ValidatingProperty can be used in an interactive form UI. (#182)

Changes

  1. Flattening a signal of Sequence no longer requires an explicit FlattenStrategy. (#199, kudos to @dmcrodrigues)
  2. BindingSourceProtocol has been renamed to BindingSource. (#254)
  3. SchedulerProtocol and DateSchedulerProtocol has been renamed to Scheduler and DateScheduler, respectively. (#257)
  4. take(during:) now handles ended Lifetime properly. (#229)

Deprecations

  1. AtomicProtocol has been deprecated. (#279)
  2. ActionProtocol has been deprecated. (#284)
  3. ObserverProtocol has been deprecated. (#262)
  4. BindingTargetProtocol has been deprecated. (#254)

1.0.1

18 Feb 07:47
Compare
Choose a tag to compare

This is a maintenance release of ReactiveSwift 1.0.

Changes

  1. Fixed a couple of infinite feedback loops in Action. (#221)
  2. Fixed a race condition of Signal which might result in a deadlock when a signal is sent a terminal event as a result of an observer of it being released. (#267)

Acknowledgements

Kudos to @mdiep, @sharplet and @andersio who helped review the pull requests.

1.0.0

01 Jan 23:16
Compare
Choose a tag to compare

ReactiveSwift 1.0 🎉

This is the first major release of ReactiveSwift, a multi-platform, pure-Swift functional reactive programming library spun off from ReactiveCocoa. As Swift continues to expand beyond Apple’s platforms, we hope that ReactiveSwift will see broader adoption. To learn more, please refer to ReactiveCocoa’s CHANGELOG.

Major changes since ReactiveCocoa 4 include:

  • Updated for Swift 3

    APIs have been updated and renamed to adhere to the Swift 3 API Design Guidelines.

  • Signal Lifetime Semantics

    Signals now live and continue to emit events only while either (a) they have observers or (b) they are retained. This clears up a number of unexpected cases and makes Signals much less dangerous.

  • Reactive Proxies

    Types can now declare conformance to ReactiveExtensionsProvider to expose a reactive property that’s generic over self. This property hosts reactive extensions to the type, such as the ones provided on NotificationCenter and URLSession.

  • Property Composition

    Propertys can now be composed. They expose many of the familiar operators from Signal and SignalProducer, including map, flatMap, combineLatest, etc.

  • Binding Primitives

    BindingTargetProtocol and BindingSourceProtocol have been introduced to allow binding of observable instances to targets. BindingTarget is a new concrete type that can be used to wrap a settable but non-observable property.

  • Lifetime

    Lifetime is introduced to represent the lifetime of any arbitrary reference type. This can be used with the new take(during:) operator, but also forms part of the new binding APIs.

  • Race-free Action

    A new Action initializer Action(state:enabledIf:_:) has been introduced. It allows the latest value of any arbitrary property to be supplied to the execution closure in addition to the input from apply(_:), while having the availability being derived from the property.

    This eliminates a data race in ReactiveCocoa 4.x, when both the enabledIf predicate and the execution closure depend on an overlapping set of properties.

Extensive use of Swift’s @available declaration has been used to ease migration from ReactiveCocoa 4. Xcode should have fix-its for almost all changes from older APIs.

Thank you to all of @ReactiveCocoa/reactiveswift and all our contributors, but especially to @andersio, @liscio, @mdiep, @NachoSoto, and @sharplet. ReactiveSwift is only possible due to the many hours of work that these individuals have volunteered. ❤️

1.0.0 Release Candidate 3

22 Dec 23:13
Compare
Choose a tag to compare
Pre-release

This is the third release candidate of ReactiveSwift 1.0.0.

🚄 Release Roadmap

Changed since Release Candidate 2

  1. Fixed the unbound memory growth of unidirectional bindings. (#176)
  2. Fixed a leak in CompositeDisposable.DisposableHandle. (#177)

Acknowledgements

Kudos to @mdiep, @liscio and @andersio who helped review the pull requests.

Previous Releases

1.0.0 Release Candidate 2

18 Dec 20:34
Compare
Choose a tag to compare
Pre-release

This is the second release candidate of ReactiveSwift 1.0.0.

🚄 Release Roadmap

New since Release Candidate 1

  1. attempt and attemptMap now have a variant that interoperates with native Swift error handling. (#141, kudos to @sharplet)

Changed since Release Candidate 1

  1. Fixed broken non-optional to optional bindings. (#165)
    Specifically: Target<Value?> <~ Source<Value>
  2. innerDisposable of SerialDisposable and ScopedDisposable has been renamed. (#164)
  3. Signal.pipe now returns a named tuple. (#153, kudos to @sharplet)

Acknowledgements

Kudos to @mdiep, @sharplet, @liscio and @andersio who helped review the pull requests.

Previous Releases

1.0.0 Release Candidate 1

15 Dec 14:37
Compare
Choose a tag to compare
Pre-release

This is the first release candidate of ReactiveSwift 1.0.0.

🚄 Release Roadmap

New since alpha 4

  1. New operator: withLatest(from:). (#128, kudos to @inamiy)
  2. New operator: throttle(while:on:). (#58, kudos to @sharplet)
  3. Streamlined binding operator implementation with the new BindingSourceProtocol. (#131, kudos to @mdiep)

Changed since alpha 4

  1. startWithSignal now disposes its signal appropriately under the new Signal lifetime semantics. (#106)
  2. SignalProducer.times is renamed to SignalProducer.repeat. (#119)
  3. The labels of the Sequence and Signal variants of SignalProducer.init are now dropped. (#120)
  4. Composed properties no longer capture its sources. (#117)
  5. Property.init(_:) now creates a property which observes the given property without retaining it. The existential property initializer is now renamed to Property.init(capturing:), and is subject to deprecation when generalised existentials land. (#117)
  6. URLSession.reactive.data(with:) now wraps its error in AnyError. (#133, kudos to @ikesyo)
  7. All terminal events are now allowed to be sent recursively to prevent Signals from deadlocks due to concurrent reference counting races. (#137, kudos to @andersio and @mdiep)
  8. Disposables are now faster with the adoption of lock-free primitives. (#107, kudos to @andersio)

Acknowledgements

Kudos to @mdiep, @NachoSoto, @sharplet, @ikesyo, @liscio and @andersio who helped review the pull requests. Kudos also to @iv-mexx who helped update the documentation.

Previous Releases

1.0.0 alpha 4

28 Nov 00:24
Compare
Choose a tag to compare
1.0.0 alpha 4 Pre-release
Pre-release

New since alpha 3

  1. DispatchTimeInterval is now used in place of TimeInterval in APIs that would offset Dates. (#48, kudos to @liscio, @NachoSoto and @mdiep)
  2. New Action initializer: Action(state:enabledIf:_:). (#22, kudos to @sharplet and @mdiep)
    • Create an Action from a Property with an availability predicate to be applied on the property. Note that the execution closure would be passed not only the input from apply(_:), but also the latest property value observed by the Action.
    • This new variant is recommended for modelling UI that has inputs to the Action that would affect the availability of the Action.
  3. New Action initializer: Action(input:_:). (#22)
    • Create an Action with a Property as its input. apply would accept no input, but takes the latest value from the property instead.
    • If you supply a property of optional, the action is executed only if the input is not nil.

Changed since alpha 3

  1. ReactiveExtensionsProvider now provide a static reactive for extensions to the type. (#70, kudos to @sharplet)
  2. Fixed a bug in SignalProducer.on which caused the signal to be disposed of too early. (#80, kudos to @andersio and @ikesyo)
  3. Restored value as the last parameter of SignalProducer.on. (#104, kudos to @dmcrodrigues)
  4. Fixed two race conditions related to interrupted delivery in Signal. (#123, kudos to @andersio and @NachoSoto)
  5. Faster Bag. (#126, kudos to @andersio)

Acknowledgements

Kudos to @mdiep, @NachoSoto, @sharplet, @ikesyo and @andersio who helped review the pull requests. Kudos also to @iv-mexx, @morganchen12 and @Iyuna who helped update the documentation and the playgrounds.

1.0.0 alpha 3

18 Oct 22:53
Compare
Choose a tag to compare
1.0.0 alpha 3 Pre-release
Pre-release

This is an alpha release of ReactiveSwift. It targets Swift 3.0. Please be aware that more breaking changes are expected.

Improved

  • APIs have been updated for Swift 3
  • Signals completes when they have no observers and no strong references to them
  • ScopedDisposables are generic over the inner disposable
  • Atomic.modify now uses inout to pass the value, and returns the generic result from the supplied action
  • Property subsumed ConstantProperty
  • Interoperability of <~ bindings with Optionals
  • Reactive extensions to Foundation are moved to .reactive (the Reactive struct).
  • Notifications from NotificationCenter are now modelled as hot signals.

Added

  • Lifetime for completing signals when an instance deallocates.
  • Reactive struct for adding ReactiveSwift extensions
  • Composition operators for properties

Many more changes since ReactiveCocoa 4! Future releases will aim to have more complete release notes.

1.0.0-alpha.2

07 Oct 21:18
Compare
Choose a tag to compare
1.0.0-alpha.2 Pre-release
Pre-release

This is an alpha release of ReactiveSwift. It targets Swift 3.0. Please be aware that more breaking changes are expected.

Improved

  • APIs have been updated for Swift 3
  • Signals completes when they have no observers and no strong references to them
  • ScopedDisposables are generic over the inner disposable
  • Atomic.modify now uses inout to pass the value, and returns the generic result from the supplied action
  • Property subsumed ConstantProperty
  • Interoperability of <~ bindings with Optionals
  • Reactive extensions to Foundation are moved to .reactive (the Reactive struct).

Added

  • Lifetime for completing signals when an instance deallocates.
  • Reactive struct for adding ReactiveSwift extensions
  • Composition operators for properties

Many more changes since ReactiveCocoa 4! Future releases will aim to have more complete release notes.

1.0.0-alpha.1

24 Sep 01:43
Compare
Choose a tag to compare
1.0.0-alpha.1 Pre-release
Pre-release

This is the first alpha release of ReactiveSwift. It targets Swift 3.0. Please be aware that more breaking changes are expected.

Improved

  • APIs have been updated for Swift 3
  • Signals completes when they have no observers and no strong references to them
  • ScopedDisposables are generic over the inner disposable
  • Atomic.modify now uses inout to pass the value, and returns the generic result from the supplied action
  • Property subsumed ConstantProperty
  • Interoperability of <~ bindings with Optionals

Added

  • Lifetime for completing signals when an instance deallocates.
  • Composition operators for properties

Many more changes since ReactiveCocoa 4! Future releases will aim to have more complete release notes.