Skip to content

Instantly share code, notes, and snippets.

@igorkulman
Last active March 13, 2017 12:00
Show Gist options
  • Save igorkulman/2bb98d3398d1f211ba0f81c0f6ee90e7 to your computer and use it in GitHub Desktop.
Save igorkulman/2bb98d3398d1f211ba0f81c0f6ee90e7 to your computer and use it in GitHub Desktop.
numberTextField.reactive.text.bidirectionalBind(to: viewModel.phoneNumber).dispose(in: reactive.bag)
numberTextField.reactive.textColor.bind(signal: viewModel.isValid.map({ [unowned self] (isValid) in return isValid ? self.view.tintColor : UIColor.red})).dispose(in: reactive.bag)
self.navigationItem.rightBarButtonItem.reactive.isEnabled.bind(signal: viewModel.isValid).dispose(in: reactive.bag)
class NumberSelectionViewModel {
let selectedCountry = Observable<CountryDefinition?>(nil)
let phoneNumber = Observable<String?>(nil)
let isValid: Signal<Bool, Property<Any>.Error>
init() {
isValid = combineLatest(self.selectedCountry, self.phoneNumber) {
(country: CountryDefinition?, number: String?) in if let number = number, let parsedNumber = try? NBPhoneNumberUtil.sharedInstance().parse(number, defaultRegion: country?.isoCode ?? "de") {
return NBPhoneNumberUtil.sharedInstance().isValidNumber(parsedNumber)
} else {
return false
}
}
}
}
class NumberSelectionViewModel {
let selectedCountry = Variable<CountryDefinition?>(nil)
let phoneNumber = Variable<String?>(nil)
let isValid : Observable<Bool>
init() {
isValid = Observable.combineLatest(selectedCountry.asObservable(), phoneNumber.asObservable()) {
(country: CountryDefinition?, number: String?)->Bool in if let number = number, let parsedNumber = try? NBPhoneNumberUtil.sharedInstance().parse(number, defaultRegion: country?.isoCode ?? "de") {
return NBPhoneNumberUtil.sharedInstance().isValidNumber(parsedNumber)
} else {
return false
}
}
}
}
numberTextField.rx.text.bindTo(viewModel.phoneNumber).disposed(by: disposeBag)
viewModel.isValid.bindTo(navigationItem.rightButtonItem.rx.isEnabled).disposed(by: disposeBag)
viewModel.isValid.asObservable().map({[unowned self] (isValid) in return isValid ? self.view.tintColor : UIColor.red}).bindTo(numberTextField.rx.textColor).disposed(by: disposeBag)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment