Change Log

All notable changes to this project will be documented in this file.


6.5.0

You can now use await on Observable-conforming objects (as well as Driver, Signal, Infallible, Single, Completable) using the following syntax:

do {
  for value in try await observable.values {
      print(value) // Next event
  }
  // Completed here
} catch {
  // Error event
  print("An error occurred:", error.localizedDescription)
}

Check out the full documentation for additional information: https://github.com/ReactiveX/RxSwift/blob/main/Documentation/SwiftConcurrency.md

6.2.0

Breaking

Note: It is extremely rare to ship a breaking change in a patch release, but this is a relatively fresh feature with unusual circumstances. For the full story, see #2290.

Other changes

6.0.0-rc.2

6.0.0-rc.1

Note 1: RxSwift 6 and above has a minimum deployment target of iOS 9 and targets Swift 5.1 (Xcode 11) and above Note 2: Starting with RxSwift 6.x, RxSwift will no longer follow Swift versioning. Meaning, RxSwift can possibly move to v6, v7 or v8 while Swift itself is still in 5.x.

Unreleased

5.1.1

Note: We no longer guarantee support for Xcode 10.x. Maintaining these is counter-intuitive as they're over a year old and are ridden with bugs.

5.1.0

5.0.1

5.0.0

RxSwift 5 is a mostly source-compatible release targeting the Swift 5 compiler.

Xcode 10.2 is the minimum supported version (or Swift 5 on Linux).

If you're using Xcode 10.1 and below, please use RxSwift 4.5.

Anomalies

4.5.0

4.4.2

Anomalies

4.4.1

Anomalies

4.4.0

This release introduces a new framework RxAtomic that enables using C11 atomic primitives in RxSwift as a replacement for deprecated OSAtomic* functions. Carthage users will probably need to include this framework manually.

Anomalies

4.3.1

Anomalies

4.3.0

Anomalies

4.2.0

Anomalies

4.1.2

Anomalies

4.1.1

Anomalies

4.1.0

Anomalies

4.0.0

Anomalies

4.0.0-rc.0

4.0.0-beta.1

Anomalies

4.0.0-beta.0

Anomalies

4.0.0-alpha.1

Anomalies

4.0.0-alpha.0

Anomalies

3.6.1

Anomalies

3.6.0

Anomalies

3.5.0

Anomalies

3.4.1 (Xcode 8.3.1 / Swift 3.1 compatible)

Anomalies

3.4.0 (Xcode 8.3.1 / Swift 3.1 compatible)

Anomalies

3.3.1 (Xcode 8 / Swift 3.0 compatible)

Anomalies

3.3.0 (Xcode 8 / Swift 3.0 compatible)

Anomalies

3.2.0 (Xcode 8 / Swift 3.0 compatible)

Anomalies

3.1.0 (Xcode 8 / Swift 3.0 compatible)

Anomalies

3.0.1 (Xcode 8 / Swift 3.0 compatible)

Anomalies

3.0.0 (Xcode 8 / Swift 3.0 compatible)

Anomalies

3.0.0-rc.1 (Xcode 8 / Swift 3.0 compatible)

textField.rx.text          // <- now has type `ControlProperty<String?>`
textField.rx.text.orEmpty  // <- now has type `ControlProperty<String>`
let text: Observable<String> = Observable.just("")

// Previously `map { $0 }` was needed because of mismatch between sequence `String` type and `String?` type
// on binding `rx.text` observer.
text.bindTo(label.rx.text)  
   .disposed(by: disposeBag)

...

let text = Driver.just("")
text.drive(label.rx.text)
   .disposed(by: disposeBag)

3.0.0-beta.2 (Xcode 8 / Swift 3.0 compatible)

3.0.0-beta.1 (Xcode 8 GM compatible 8A218a)

3.0.0.alpha.1 (Xcode 8 beta 6 compatible 8S201h)

Features

Anomalies

2.6.0

Features

Anomalies

2.5.0

Features

Anomalies

2.4.0

Features

Anomalies

2.3.1

Features

2.3.0

Features

Anomalies

2.2.0

Public Interface anomalies

This is example of those changes:

- public func rx_itemsWithCellFactory<S : Sequence, O : ObservableType where O.E == S>
      (source: O)
      (cellFactory: (UITableView, Int, S.Iterator.Element) -> UITableViewCell) -> Disposable
+ public func rx_itemsWithCellFactory<S : Sequence, O : ObservableType where O.E == S>
      (source: O)
      -> (cellFactory: (UITableView, Int, S.Iterator.Element) -> UITableViewCell) -> Disposable
-    public var rx_didFinishDeferredUpdatesWithError: RxSwift.Observable<NSError> { get }
+    public var rx_didFinishDeferredUpdatesWithError: RxSwift.Observable<NSError?> { get }

Features

Anomalies

2.1.0

Features

Anomalies

2.0.0

Features

Anomalies

2.0.0-rc.0

Features

func testMap() {
    let scheduler = TestScheduler(initialClock: 0)

    let xs = scheduler.createHotObservable([
        next(150, 1),
        next(210, 0),
        next(220, 1),
        next(230, 2),
        next(240, 4),
        completed(300)
        ])

    let res = scheduler.start { xs.map { $0 * 2 } }

    let correctEvents = [
        next(210, 0 * 2),
        next(220, 1 * 2),
        next(230, 2 * 2),
        next(240, 4 * 2),
        completed(300)
    ]

    let correctSubscriptions = [
        Subscription(200, 300)
    ]

    XCTAssertEqual(res.events, correctEvents)
    XCTAssertEqual(xs.subscriptions, correctSubscriptions)
}
let (
    usernameEvents,
    passwordEvents,
    repeatedPasswordEvents,
    loginTapEvents,

    expectedValidatedUsernameEvents,
    expectedSignupEnabledEvents
) = (
    scheduler.parseEventsAndTimes("e---u1----u2-----u3-----------------", values: stringValues).first!,
    scheduler.parseEventsAndTimes("e----------------------p1-----------", values: stringValues).first!,
    scheduler.parseEventsAndTimes("e---------------------------p2---p1-", values: stringValues).first!,
    scheduler.parseEventsAndTimes("------------------------------------", values: events).first!,

    scheduler.parseEventsAndTimes("e---v--f--v--f---v--o----------------", values: validations).first!,
    scheduler.parseEventsAndTimes("f--------------------------------t---", values: booleans).first!
)

Deprecated

Fixed

2.0.0-beta.4

Updated

Fixed

2.0.0-beta.3

Updated

Fixed

2.0.0-beta.2

Updated

Fixed

2.0.0-beta.1

Updated

Fixed

2.0.0-alpha.4

Updated

Fixed

2.0.0-alpha.3

Updated

2.0.0-alpha.2

Updated

2.0.0-alpha.1

Fixed

Updated

Fixed

1.9.1

Updated

Fixed