Skip to content

Instantly share code, notes, and snippets.

@klein-artur
Created February 17, 2020 17:58
Show Gist options
  • Save klein-artur/a4ae15fc783c4810a40f09d83c905c48 to your computer and use it in GitHub Desktop.
Save klein-artur/a4ae15fc783c4810a40f09d83c905c48 to your computer and use it in GitHub Desktop.
Two Way Rx Binding with an infix operator <->
import Cocoa
import RxSwift
import RxCocoa
infix operator <->
func <-> <T>(property: ControlProperty<T>, variable: BehaviorRelay<T>) -> Disposable {
let bindToUIDisposable = variable.asObservable()
.bind(to: property)
let bindToVariable = property
.subscribe(onNext: { n in
variable.accept(n)
}, onCompleted: {
bindToUIDisposable.dispose()
})
return CompositeDisposable(bindToUIDisposable, bindToVariable)
}
func <-> <T>(property: ControlProperty<T?>, variable: BehaviorRelay<T>) -> Disposable {
let bindToUIDisposable = variable.asObservable()
.bind(to: property)
let bindToVariable = property
.subscribe(onNext: { n in
if let n = n {
variable.accept(n)
}
}, onCompleted: {
bindToUIDisposable.dispose()
})
return CompositeDisposable(bindToUIDisposable, bindToVariable)
}
func <-> <T>(property: ControlProperty<T?>, variable: BehaviorRelay<T?>) -> Disposable {
let bindToUIDisposable = variable.asObservable()
.bind(to: property)
let bindToVariable = property
.subscribe(onNext: { n in
variable.accept(n)
}, onCompleted: {
bindToUIDisposable.dispose()
})
return CompositeDisposable(bindToUIDisposable, bindToVariable)
}
func <-> <T>(variable: BehaviorRelay<T>, property: ControlProperty<T?>) -> Disposable {
let bindToUIDisposable = variable.asObservable()
.bind(to: property)
let bindToVariable = property
.subscribe(onNext: { n in
if let n = n {
variable.accept(n)
}
}, onCompleted: {
bindToUIDisposable.dispose()
})
return CompositeDisposable(bindToUIDisposable, bindToVariable)
}
func <-> <T>(variable: BehaviorRelay<T?>, property: ControlProperty<T?>) -> Disposable {
let bindToUIDisposable = variable.asObservable()
.bind(to: property)
let bindToVariable = property
.subscribe(onNext: { n in
variable.accept(n)
}, onCompleted: {
bindToUIDisposable.dispose()
})
return CompositeDisposable(bindToUIDisposable, bindToVariable)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment