Skip to content

Instantly share code, notes, and snippets.

@devxoul
Created April 5, 2019 09:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save devxoul/4dc4846567b7e7516424503f394d50e3 to your computer and use it in GitHub Desktop.
Save devxoul/4dc4846567b7e7516424503f394d50e3 to your computer and use it in GitHub Desktop.
playgroundShouldContinueIndefinitely()
class Reactor {
lazy var state: Observable<Int> = self.closure().concat(Observable<Int>.never())
private lazy var closure: () -> Observable<Int> = self.closureImplementation()
deinit {
print("DEINIT SUCCESS!!!")
}
func closureImplementation() -> () -> Observable<Int> {
return { [weak self] in
guard let self = self else { return .empty() }
print("B", _getRetainCount(self)) // 3
return Observable<Int>.just(10)
.flatMap { [weak self] _ -> Observable<Int> in
guard let self = self else { return .empty() }
print("C", _getRetainCount(self)) // 3
return self.fooMutation()
}
}
}
func fooMutation() -> Observable<Int> {
print("D", _getRetainCount(self))
return Observable.just(20)
}
}
example("Try yourself") {
print("START")
defer { print("END") }
let disposeBag = DisposeBag()
let reactor = Reactor()
print("A", _getRetainCount(reactor)) // 2
reactor.state.debug("state").subscribe().disposed(by: disposeBag)
}
@devxoul
Copy link
Author

devxoul commented Apr 5, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment