Skip to content

Instantly share code, notes, and snippets.

@twittemb
Created January 1, 2018 23:23
Show Gist options
  • Save twittemb/821d6fcc820acbe727f48bef1fc7eff1 to your computer and use it in GitHub Desktop.
Save twittemb/821d6fcc820acbe727f48bef1fc7eff1 to your computer and use it in GitHub Desktop.
extension Reactive where Base: UIViewController {
/// Observable, triggered when the view has appeared for the first time
public var firstTimeViewDidAppear: Single<Void> {
return sentMessage(#selector(Base.viewDidAppear)).map { _ in
return Void()
}.take(1).asSingle()
}
/// Observable, triggered when the view is being dismissed
public var dismissed: ControlEvent<Bool> {
let source = sentMessage(#selector(Base.dismiss))
.map { $0.first as? Bool ?? false }
return ControlEvent(events: source)
}
/// Observable, triggered when the view appearance state changes
public var displayed: Observable<Bool> {
let viewDidAppearObs = sentMessage(#selector(Base.viewDidAppear))
.map { _ in true }
let viewWillDisappearObs = sentMessage(#selector(Base.viewWillDisappear))
.map { _ in false }
return Observable<Bool>.merge(viewDidAppearObs, viewWillDisappearObs)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment