diff --git a/CHANGELOG.md b/CHANGELOG.md index 80f090f7..3bb9f082 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,19 @@ All notable changes to this project will be documented in this file. ## [2.0.0-rc.0](https://github.com/ReactiveX/RxSwift/releases/tag/2.0.0-rc.0) -#### Updated +#### Features * Adds generic `public func rx_sentMessage(selector: Selector) -> Observable<[AnyObject]>` that enables observing of messages sent to any object. (This is enabled if DISABLE_SWIZZLING isn't set). -* Adds new `RxTests` library to enable testing of custom rx operators. + * use cases like `cell.rx_sentMessage("prepareForReuse")` are now supported. +* Linux support (proof of concept, but single threaded mode works) + * more info in [Documentation/Linux.md](https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Linux.md) +* Initial support for `Swift Package Manager` (works on `Linux`, still can't compile `RxCocoa` on `OSX`) + * Project content is linked to `Sources` automagically using custom tool +* Adds `VirtualTimeScheduler` to `RxSwift` +* Adds `HistoricalScheduler` to `RxSwift` +* Improves performance of virtual schedulers using priority queue. +* Adds new `RxTests` library to enable testing of custom Rx operators. This library contains everything needed to write unit tests in the following way: ```swift func testMap() { @@ -42,38 +50,95 @@ func testMap() { XCTAssertEqual(xs.subscriptions, correctSubscriptions) } ``` -* Changes `ConnectableObservable`, generic argument is now type of elements in observable sequence and not type of underlying subject. (BREAKING CHANGE) -* Removes `RxBox` and `RxMutable` box from public interface. (BREAKING CHANGE) -* Deprecates versions of operators with hidden external parameters (scheduler, count) in favor of ones with explicit parameter names. - E.g. - `.debounce(0.2, scheduler: MainScheduler.sharedInstance)` instead of +* Adds test project for `RxExample-iOS` that demonstrates how to easily write marble tests using `RxTests` project. +```swift +let ( + usernameEvents, + passwordEvents, + repeatedPasswordEvents, + loginTapEvents, - `.debounce(0.2, MainScheduler.sharedInstance)` + 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!, - `range(0, count: 10)` instead of `range(0, 10)` + scheduler.parseEventsAndTimes("e---v--f--v--f---v--o----------------", values: validations).first!, + scheduler.parseEventsAndTimes("f--------------------------------t---", values: booleans).first! +) +``` - `interval(1, scheduler: MainScheduler.sharedInstance)` instead of - - `interval(1, MainScheduler.sharedInstance)` - - ... -* Deprecates `rx_controlEvents` in favor of `rx_controlEvent`. (consistency) +* Adds example app for GitHub signup example that shows the same example written with and without `Driver`. +* Documents idea behind units and `Driver` in `Units.md`. +* Example of table view with editing is polished to use more functional approach. * Adds `deferred` to `Driver` unit. * Removes implicitly unwrapped optionals from `CLLocationManager` extensions. +* Removes implicitly unwrapped optionals from `NSURLSession` extensions. * Polishes the `debug` operator format. -* Documents idea behind units in `Units.md`. * Adds optional `cellType` parameter to Table/Collection view `rx_itemsWithCellIdentifier` method. * Polish for calculator example in `RxExample` app. * Documents and adds unit tests for tail recursive optimizations of `concat` operator. * Moves `Event` equality operator to `RxTests` project. * Adds `seealso` references to `reactivex.io`. +* Polishes headers in source files and adds tests to enforce standard header format. +* Adds `driveOnScheduler` to enable scheduler mocking for `Driver` during unit tests. +* Adds assertions to `drive*` family of functions that makes sure they are always called from main thread. +* Refactoring and polishing of internal ObjC runtime interception architecture. + +#### Deprecated + +* Changes `ConnectableObservable`, generic argument is now type of elements in observable sequence and not type of underlying subject. (BREAKING CHANGE) +* Removes `RxBox` and `RxMutable` box from public interface. (BREAKING CHANGE) +* `SchedulerType` now isn't parametrized on `Time` and `TimeInterval`. +* Deprecates `Variable` implementing `ObservableType` in favor of `asObservable()`. + * Now variable also sends `.Completed` to observable sequence returned from `asObservable` when deallocated. + If you were (mis)using variable to return single value + ``` + Variable(1).map { x in ... } + ``` + ... you can just use `just` operator + ``` + Observable.just(1).map { x in ... } + ``` +* Deprecates free functions in favor of `Observable` factory methods, and deprecates versions of operators with hidden external parameters (scheduler, count) in favor of ones with explicit parameter names. + E.g. + + `Observable.just(1)` instead of `just(1)` + + `Observable.empty()` instead of `empty()` + + `Observable.error()` instead of `failWith()` + + `Observable.of(1, 2, 3)` instead of `sequenceOf(1, 2, 3)` + + `.debounce(0.2, scheduler: MainScheduler.sharedInstance)` instead of `.debounce(0.2, MainScheduler.sharedInstance)` + + `Observable.range(start:0, count: 10)` instead of `range(0, 10)` + + `Observable.generate(initialState: 0, condition: { $0 < 10 }) { $0 + 1 }` instead of `generate(0, condition: { $0 < 10 }) { $0 + 1 }` + + `Observable.interval(1, scheduler: MainScheduler.sharedInstance)` instead of `interval(1, MainScheduler.sharedInstance)` + + ... + + If you want to continue using free functions form, you can define your free function aliases for `Observable` factory methods (basically copy deprecated methods). +* Deprecates `rx_controlEvents` in favor of `rx_controlEvent`. +* Deprecates `MainScheduler.sharedInstance` in favor of `MainScheduler.instance` +* Deprecates `ConcurrentMainScheduler.sharedInstance` in favor of `ConcurrentMainScheduler.instance` +* Deprecates factory methods from `Drive` in favor of `Driver` factory methods. +* Deprecates `sampleLatest` in favor of `withLatestFrom`. #### Fixed * Improves and documents resource leak code in `RxExample`. * Replaces `unowned` reference with `weak` references in `RxCocoa` project. * Fixes `debug` operator not using `__FILE__` and `__LINE__` properly. +* Fixes anomaly with `timeout` operator. +* Fixes problem with spell-checker and `UIText*` losing focus. ## [2.0.0-beta.4](https://github.com/ReactiveX/RxSwift/releases/tag/2.0.0-beta.4)