Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PoC: Noncopyable DisposeBag #2634

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ Emits the specified sequence of elements before beginning to emit the elements f
![](https://raw.githubusercontent.com/kzaher/rxswiftcontent/master/MarbleDiagrams/png/startwith.png)
*/
example("startWith") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable.of("🐶", "🐱", "🐭", "🐹")
.startWith("1️⃣")
.startWith("2️⃣")
.startWith("3️⃣", "🅰️", "🅱️")
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
> As this example demonstrates, `startWith` can be chained on a last-in-first-out basis, i.e., each successive `startWith`'s elements will be prepended before the prior `startWith`'s elements.
Expand All @@ -33,15 +33,15 @@ example("startWith") {
![](https://raw.githubusercontent.com/kzaher/rxswiftcontent/master/MarbleDiagrams/png/merge.png)
*/
example("merge") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

let subject1 = PublishSubject<String>()
let subject2 = PublishSubject<String>()

Observable.of(subject1, subject2)
.merge()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)

subject1.onNext("🅰️")

Expand All @@ -62,7 +62,7 @@ example("merge") {
![](https://raw.githubusercontent.com/kzaher/rxswiftcontent/master/MarbleDiagrams/png/zip.png)
*/
example("zip") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

let stringSubject = PublishSubject<String>()
let intSubject = PublishSubject<Int>()
Expand All @@ -71,7 +71,7 @@ example("zip") {
"\(stringElement) \(intElement)"
}
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)

stringSubject.onNext("🅰️")
stringSubject.onNext("🅱️")
Expand All @@ -90,7 +90,7 @@ example("zip") {
![](https://raw.githubusercontent.com/kzaher/rxswiftcontent/master/MarbleDiagrams/png/combinelatest.png)
*/
example("combineLatest") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

let stringSubject = PublishSubject<String>()
let intSubject = PublishSubject<Int>()
Expand All @@ -99,7 +99,7 @@ example("combineLatest") {
"\(stringElement) \(intElement)"
}
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)

stringSubject.onNext("🅰️")

Expand All @@ -112,7 +112,7 @@ example("combineLatest") {
}
//: There is also a variant of `combineLatest` that takes an `Array` (or any other collection of `Observable` sequences):
example("Array.combineLatest") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

let stringObservable = Observable.just("❤️")
let fruitObservable = Observable.from(["🍎", "🍐", "🍊"])
Expand All @@ -122,7 +122,7 @@ example("Array.combineLatest") {
"\($0[0]) \($0[1]) \($0[2])"
}
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
> Because the `combineLatest` variant that takes a collection passes an array of values to the selector function, it requires that all source `Observable` sequences are of the same type.
Expand All @@ -132,7 +132,7 @@ example("Array.combineLatest") {
![](https://raw.githubusercontent.com/kzaher/rxswiftcontent/master/MarbleDiagrams/png/switch.png)
*/
example("switchLatest") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

let subject1 = BehaviorSubject(value: "⚽️")
let subject2 = BehaviorSubject(value: "🍎")
Expand All @@ -142,7 +142,7 @@ example("switchLatest") {
subjectsSubject.asObservable()
.switchLatest()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)

subject1.onNext("🏈")
subject1.onNext("🏀")
Expand All @@ -161,15 +161,15 @@ example("switchLatest") {
Merges two observable sequences into one observable sequence by combining each element from the first source with the latest element from the second source, if any.
*/
example("withLatestFrom") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

let foodSubject = PublishSubject<String>()
let drinksSubject = PublishSubject<String>()

foodSubject.asObservable()
.withLatestFrom(drinksSubject) { "\($0) + \($1)" }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)

foodSubject.onNext("🥗")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,29 @@ import RxSwift
Creates a sequence that never terminates and never emits any events. [More info](http://reactivex.io/documentation/operators/empty-never-throw.html)
*/
example("never") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()
let neverSequence = Observable<String>.never()

let neverSequenceSubscription = neverSequence
.subscribe { _ in
print("This will never be printed")
}

neverSequenceSubscription.disposed(by: disposeBag)
neverSequenceSubscription.disposed(by: &disposeBag)
}
/*:
----
## empty
Creates an empty `Observable` sequence that only emits a Completed event. [More info](http://reactivex.io/documentation/operators/empty-never-throw.html)
*/
example("empty") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable<Int>.empty()
.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
> This example also introduces chaining together creating and subscribing to an `Observable` sequence.
Expand All @@ -46,27 +46,27 @@ example("empty") {
Creates an `Observable` sequence with a single element. [More info](http://reactivex.io/documentation/operators/just.html)
*/
example("just") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable.just("🔴")
.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
----
## of
Creates an `Observable` sequence with a fixed number of elements.
*/
example("of") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable.of("🐶", "🐱", "🐭", "🐹")
.subscribe(onNext: { element in
print(element)
})
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
> This example also introduces using the `subscribe(onNext:)` convenience method. Unlike `subscribe(_:)`, which subscribes an _event_ handler for all event types (Next, Error, and Completed), `subscribe(onNext:)` subscribes an _element_ handler that will ignore Error and Completed events and only produce Next event elements. There are also `subscribe(onError:)` and `subscribe(onCompleted:)` convenience methods, should you only want to subscribe to those event types. And there is a `subscribe(onNext:onError:onCompleted:onDisposed:)` method, which allows you to react to one or more event types and when the subscription is terminated for any reason, or disposed, in a single call:
Expand All @@ -83,11 +83,11 @@ example("of") {
Creates an `Observable` sequence from a `Sequence`, such as an `Array`, `Dictionary`, or `Set`.
*/
example("from") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable.from(["🐶", "🐱", "🐭", "🐹"])
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
> This example also demonstrates using the default argument name `$0` instead of explicitly naming the argument.
Expand All @@ -96,8 +96,8 @@ example("from") {
Creates a custom `Observable` sequence. [More info](http://reactivex.io/documentation/operators/create.html)
*/
example("create") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

let myJust = { (element: String) -> Observable<String> in
return Observable.create { observer in
observer.on(.next(element))
Expand All @@ -108,32 +108,32 @@ example("create") {

myJust("🔴")
.subscribe { print($0) }
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
----
## range
Creates an `Observable` sequence that emits a range of sequential integers and then terminates. [More info](http://reactivex.io/documentation/operators/range.html)
*/
example("range") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable.range(start: 1, count: 10)
.subscribe { print($0) }
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
----
## repeatElement
Creates an `Observable` sequence that emits the given element indefinitely. [More info](http://reactivex.io/documentation/operators/repeat.html)
*/
example("repeatElement") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable.repeatElement("🔴")
.take(3)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
> This example also introduces using the `take` operator to return a specified number of elements from the start of a sequence.
Expand All @@ -142,23 +142,23 @@ example("repeatElement") {
Creates an `Observable` sequence that generates values for as long as the provided condition evaluates to `true`.
*/
example("generate") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable.generate(
initialState: 0,
condition: { $0 < 3 },
iterate: { $0 + 1 }
)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
----
## deferred
Creates a new `Observable` sequence for each subscriber. [More info](http://reactivex.io/documentation/operators/defer.html)
*/
example("deferred") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()
var count = 1

let deferredSequence = Observable<String>.deferred {
Expand All @@ -176,36 +176,36 @@ example("deferred") {

deferredSequence
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)

deferredSequence
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
----
## error
Creates an `Observable` sequence that emits no items and immediately terminates with an error.
*/
example("error") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable<Int>.error(TestError.test)
.subscribe { print($0) }
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
----
## doOn
Invokes a side-effect action for each emitted event and returns (passes through) the original event. [More info](http://reactivex.io/documentation/operators/do.html)
*/
example("doOn") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

Observable.of("🍎", "🍐", "🍊", "🍋")
.do(onNext: { print("Intercepted:", $0) }, afterNext: { print("Intercepted after:", $0) }, onError: { print("Intercepted error:", $0) }, afterError: { print("Intercepted after error:", $0) }, onCompleted: { print("Completed") }, afterCompleted: { print("After completed") })
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
//: > There are also `doOnNext(_:)`, `doOnError(_:)`, and `doOnCompleted(_:)` convenience methods to intercept those specific events, and `doOn(onNext:onError:onCompleted:)` to intercept one or more events in a single call.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import RxSwift
Prints out all subscriptions, events, and disposals.
*/
example("debug") {
let disposeBag = DisposeBag()
var disposeBag = DisposeBag()
var count = 1

let sequenceThatErrors = Observable<String>.create { observer in
Expand All @@ -41,7 +41,7 @@ example("debug") {
.retry(3)
.debug()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
.disposed(by: &disposeBag)
}
/*:
----
Expand All @@ -53,7 +53,7 @@ example("debug") {
example("RxSwift.Resources.total") {
print(RxSwift.Resources.total)

let disposeBag = DisposeBag()
var disposeBag = DisposeBag()

print(RxSwift.Resources.total)

Expand Down
Loading
Loading