diff --git a/Documentation/API.md b/Documentation/API.md new file mode 100644 index 00000000..b3aee728 --- /dev/null +++ b/Documentation/API.md @@ -0,0 +1,437 @@ +## RxSwift supported operators + +In some cases there are multiple aliases for the same operator, because on different platforms / implementations, the same operation is sometimes called differently. Sometimes this is because historical reasons, sometimes because of reserved language keywords. + +When lacking a strong community consensus, RxSwift will usually include multiple aliases. + +Operators are stateless by default. + +#### Creating Observables + + * [`asObservable`](http://reactivex.io/documentation/operators/from.html) + * [`create`](http://reactivex.io/documentation/operators/create.html) + * [`defer`](http://reactivex.io/documentation/operators/defer.html) + * [`empty`](http://reactivex.io/documentation/operators/empty-never-throw.html) + * [`failWith`](http://reactivex.io/documentation/operators/empty-never-throw.html) + * [`from` (array)](http://reactivex.io/documentation/operators/from.html) + * [`interval`](http://reactivex.io/documentation/operators/interval.html) + * [`never`](http://reactivex.io/documentation/operators/empty-never-throw.html) + * [`returnElement` / `just`](http://reactivex.io/documentation/operators/just.html) + * [`returnElements`](http://reactivex.io/documentation/operators/from.html) + * [`timer`](http://reactivex.io/documentation/operators/timer.html) + +#### Transforming Observables + * [`flatMap`](http://reactivex.io/documentation/operators/flatmap.html) + * [`map` / `select`](http://reactivex.io/documentation/operators/map.html) + * [`scan`](http://reactivex.io/documentation/operators/scan.html) + +#### Filtering Observables + * [`debounce` / `throttle`](http://reactivex.io/documentation/operators/debounce.html) + * [`distinctUntilChanged`](http://reactivex.io/documentation/operators/distinct.html) + * [`filter` / `where`](http://reactivex.io/documentation/operators/filter.html) + * [`sample`](http://reactivex.io/documentation/operators/sample.html) + * [`skip`](http://reactivex.io/documentation/operators/skip.html) + * [`take`](http://reactivex.io/documentation/operators/take.html) + +#### Combining Observables + + * [`merge`](http://reactivex.io/documentation/operators/merge.html) + * [`startWith`](http://reactivex.io/documentation/operators/startwith.html) + * [`switchLatest`](http://reactivex.io/documentation/operators/switch.html) + * [`combineLatest`](http://reactivex.io/documentation/operators/combinelatest.html) + * [`zip`](http://reactivex.io/documentation/operators/zip.html) + +#### Error Handling Operators + + * [`catch`](http://reactivex.io/documentation/operators/catch.html) + * [`retry`](http://reactivex.io/documentation/operators/retry.html) + +#### Observable Utility Operators + + * [`delaySubscription`](http://reactivex.io/documentation/operators/delay.html) + * [`do` / `doOnNext`](http://reactivex.io/documentation/operators/do.html) + * [`observeOn` / `observeSingleOn`](http://reactivex.io/documentation/operators/observeon.html) + * [`subscribe`](http://reactivex.io/documentation/operators/subscribe.html) + * [`subscribeOn`](http://reactivex.io/documentation/operators/subscribeon.html) + * debug + +#### Conditional and Boolean Operators + * [`amb`](http://reactivex.io/documentation/operators/amb.html) + * [`takeUntil`](http://reactivex.io/documentation/operators/takeuntil.html) + * [`takeWhile`](http://reactivex.io/documentation/operators/takewhile.html) + +#### Mathematical and Aggregate Operators + + * [`concat`](http://reactivex.io/documentation/operators/concat.html) + * [`reduce` / `aggregate`](http://reactivex.io/documentation/operators/reduce.html) + +#### Connectable Observable Operators + + * [`multicast`](http://reactivex.io/documentation/operators/publish.html) + * [`publish`](http://reactivex.io/documentation/operators/publish.html) + * [`refCount`](http://reactivex.io/documentation/operators/refcount.html) + * [`replay`](http://reactivex.io/documentation/operators/replay.html) + * variable / sharedWithCachedLastResult + +Creating new operators is also pretty straightforward. + +## RxCocoa extensions + +**iOS / OSX** + +```swift + +extension NSObject { + + public var rx_deallocated: Observable {} + +#if !DISABLE_SWIZZLING + + public var rx_deallocating: Observable {} + +#endif + +} + +``` + + +```swift +extension NSObject { + + public func rx_observe(keyPath: String) -> Observable {} + + public func rx_observe(keyPath: String, options: NSKeyValueObservingOptions) -> Observable {} + + public func rx_observe(keyPath: String, options: NSKeyValueObservingOptions, retainSelf: Bool) -> Observable {} + +#if !DISABLE_SWIZZLING + + public func rx_observeWeakly(keyPath: String) -> Observable {} + + public func rx_observeWeakly(keyPath: String, options: NSKeyValueObservingOptions) -> Observable {} + +#endif +} +``` + +```swift +extension NSURLSession { + + public func rx_response(request: NSURLRequest) -> Observable<(NSData!, NSURLResponse!)> {} + + public func rx_data(request: NSURLRequest) -> Observable {} + + public func rx_JSON(request: NSURLRequest) -> Observable {} + + public func rx_JSON(URL: NSURL) -> Observable {} + +} +``` + +```swift +extension NSNotificationCenter { + + public func rx_notification(name: String, object: AnyObject?) -> Observable {} + +} +``` + +```swift +class DelegateProxy { + + public func observe(selector: Selector) -> Observable<[AnyObject]> {} + +} +``` + +```swift +extension CLLocationManager { + + public var rx_delegate: DelegateProxy {} + + public var rx_didUpdateLocations: Observable<[CLLocation]!> {} + + public var rx_didFailWithError: Observable {} + + public var rx_didFinishDeferredUpdatesWithError: Observable {} + + public var rx_didPauseLocationUpdates: Observable {} + + public var rx_didResumeLocationUpdates: Observable {} + + public var rx_didUpdateHeading: Observable {} + + public var rx_didEnterRegion: Observable {} + + public var rx_didExitRegion: Observable {} + + public var rx_didDetermineStateForRegion: Observable<(state: CLRegionState, region: CLRegion!)> {} + + public var rx_monitoringDidFailForRegionWithError: Observable<(region: CLRegion!, error: NSError!)> {} + + public var rx_didStartMonitoringForRegion: Observable {} + + public var rx_didRangeBeaconsInRegion: Observable<(beacons: [CLBeacon]!, region: CLBeaconRegion!)> {} + + public var rx_rangingBeaconsDidFailForRegionWithError: Observable<(region: CLBeaconRegion!, error: NSError!)> {} + + public var rx_didVisit: Observable {} + + public var rx_didChangeAuthorizationStatus: Observable {} + +} +``` + +**iOS** + +```swift + +extension UIControl { + + public func rx_controlEvents(controlEvents: UIControlEvents) -> Observable { } + + public func rx_subscribeEnabledTo(source: Observable) -> Disposable {} + +} + +``` + +```swift +extension UIButton { + + public var rx_tap: Observable {} + +} +``` + +```swift +extension UITextField { + + public var rx_text: Observable {} + +} +``` + +```swift +extension UISearchBar { + + public var rx_delegate: DelegateProxy {} + + public var rx_searchText: Observable {} + +} +``` + +```swift +extension UILabel { + + public func rx_subscribeTextTo(source: Observable) -> Disposable {} + +} +``` + +```swift +extension UIDatePicker { + + public var rx_date: Observable {} + +} +``` + +```swift +extension UIImageView { + + public func rx_subscribeImageTo(source: Observable) -> Disposable {} + + public func rx_subscribeImageTo + (animated: Bool) + (source: Observable) + -> Disposable {} + +} +``` + +```swift +extension UIScrollView { + + public var rx_delegate: DelegateProxy {} + + public func rx_setDelegate(delegate: UIScrollViewDelegate) {} + + public var rx_contentOffset: Observable {} + +} +``` + +```swift +extension UIBarButtonItem { + + public var rx_tap: Observable {} + +} +``` + +```swift +extension UISlider { + + public var rx_value: Observable {} + +} +``` + +```swift +extension UITableView { + + public var rx_dataSource: DelegateProxy {} + + public func rx_setDataSource(dataSource: UITableViewDataSource) -> Disposable {} + + public func rx_subscribeWithReactiveDataSource>(dataSource: DataSource) + -> Observable -> Disposable {} + + public func rx_subscribeItemsTo(cellFactory: (UITableView, Int, Item) -> UITableViewCell) + -> Observable<[Item]> -> Disposable {} + + public func rx_subscribeItemsToWithCellIdentifier(cellIdentifier: String, configureCell: (NSIndexPath, Item, Cell) -> Void) + -> Observable<[Item]> -> Disposable {} + + public var rx_itemSelected: Observable {} + + public var rx_itemInserted: Observable {} + + public var rx_itemDeleted: Observable {} + + public var rx_itemMoved: Observable {} + + // This method only works in case one of the `rx_subscribeItemsTo` methods was used. + public func rx_modelSelected() -> Observable {} + +} +``` + +```swift +extension UICollectionView { + + public var rx_dataSource: DelegateProxy {} + + public func rx_setDataSource(dataSource: UICollectionViewDataSource) -> Disposable {} + + public func rx_subscribeWithReactiveDataSource>(dataSource: DataSource) + -> Observable -> Disposable {} + + public func rx_subscribeItemsTo(cellFactory: (UICollectionView, Int, Item) -> UICollectionViewCell) + -> Observable<[Item]> -> Disposable {} + + public func rx_subscribeItemsToWithCellIdentifier(cellIdentifier: String, configureCell: (Int, Item, Cell) -> Void) + -> Observable<[Item]> -> Disposable {} + + public var rx_itemSelected: Observable {} + + // This method only works in case one of the `rx_subscribeItemsTo` methods was used. + public func rx_modelSelected() -> Observable {} +} +``` + +```swift +extension UIGestureRecognizer { + + public var rx_event: Observable {} + +} +``` + +```swift +extension UIActionSheet { + + public var rx_delegate: DelegateProxy {} + + public var rx_clickedButtonAtIndex: Observable {} + + public var rx_willDismissWithButtonIndex: Observable {} + + public var rx_didDismissWithButtonIndex: Observable {} + +} +``` + + +```swift +extension UIAlertView { + + public var rx_delegate: DelegateProxy {} + + public var rx_clickedButtonAtIndex: Observable {} + + public var rx_willDismissWithButtonIndex: Observable {} + + public var rx_didDismissWithButtonIndex: Observable {} + +} +``` + +```swift +extension UISegmentedControl { + + public var rx_value: Observable {} + +} +``` + +```swift +extension UISwitch { + + public var rx_value: Observable {} + +} +``` + +**OSX** + +```swift +extension NSControl { + + public var rx_controlEvents: Observable<()> {} + +} +``` + +```swift + +extension NSSlider { + + public var rx_value: Observable {} + +} +``` + +```swift +extension NSButton { + + public var rx_tap: Observable {} + +} +``` + +```swift +extension NSImageView { + + public func rx_subscribeImageTo(source: Observable) -> Disposable {} + + public func rx_subscribeImageTo + (animated: Bool) + (source: Observable) -> Disposable {} +} +``` + +```swift +extension NSTextField { + + public var rx_delegate: DelegateProxy {} + + public var rx_text: Observable {} + + public func rx_subscribeTextTo(source: Observable) -> Disposable {} +} +``` + diff --git a/Documentation/GettingStarted.md b/Documentation/GettingStarted.md index f04b9dba..35ca7c96 100644 --- a/Documentation/GettingStarted.md +++ b/Documentation/GettingStarted.md @@ -1,8 +1,8 @@ **Content** -1. [Getting started examples](#getting-started-examples) +1. [Simple example] -## Getting started examples +## Simple example To understand these examples, you will need to understand to `>-` operator. diff --git a/README.md b/README.md index 87a3015f..cc46b262 100644 --- a/README.md +++ b/README.md @@ -18,15 +18,15 @@ RxSwift ├-README.md ├-RxSwift - platform agnostic core ├-RxCocoa - extensions for UI, NSURLSession, KVO ... -├-RxExample - example apps: UI bindings example, Wikipedia search example ... +├-RxBlocking - set of blocking operators for unit testing +├-RxExample - example apps: taste of Rx └-Rx.xcworkspace - workspace that contains all of the projects hooked up ``` Hang out with us on [rxswift.slack.com](http://slack.rxswift.org) 1. [Introduction](#introduction) -1. [RxSwift supported operators](#rxswift-supported-operators) -1. [RxCocoa extensions](#rxcocoa-extensions) +1. [API - RxSwift operators / RxCocoa extensions](Documentation/API.md) 1. [Build / Install / Run](#build--install--run) 1. [Feature comparison with other frameworks](#feature-comparison-with-other-frameworks) 1. [What problem does Rx solve?](#what-problem-does-rx-solve) @@ -41,8 +41,6 @@ Hang out with us on [rxswift.slack.com](http://slack.rxswift.org)