Skip to content

Instantly share code, notes, and snippets.

@ShoMasegi
Created November 26, 2018 03:30
Show Gist options
  • Save ShoMasegi/d16fea6e4af161107b06cbf9b23ea5e2 to your computer and use it in GitHub Desktop.
Save ShoMasegi/d16fea6e4af161107b06cbf9b23ea5e2 to your computer and use it in GitHub Desktop.
extension Reactive where Base: FilledTextField {
var delegate: DelegateProxy<FilledTextField, FiledTextFieldDelegate> {
return FilledTextFieldDelegateProxy.proxy(for: base)
}
var textDidChange: ControlProperty<String?> {
let source = delegate.methodInvoked(#selector(FilledTextFieldDelegate.filledTextField(_:textFieldTextDidChange:)))
.map { params -> String? in
let text = try castOrThrow(String.self, params[1])
return text
}
let bindingObserver = Binder(base) { (filledTextField, text: String?) in
filledTextField.textField.text = text
}
return ControlProperty(values: source, valueSink: bindingObserver)
}
var didBeginFocusing: ControlEvent<Void> {
let source = delegate.methodInvoked(#selector(FilledTextFieldDelegate.filledTextFieldDidBeginFocusing(_:)))
.map { _ in }
return ControlEvent(events: source)
}
}
func castOrThrow<T>(_ resultType: T.Type, _ object: Any) throws -> T {
guard let returnValue = object as? T else {
throw RxCocoaError.castingError(object: object, targetType: resultType)
}
return returnValue
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment