Delegate패턴을 Rx로 확장하는 방식

Control Event 생성 펙토리 메소드

/// - parameter controlEvents: Filter for observed event types.
    public func controlEvent(_ controlEvents: UIControl.Event) -> ControlEvent<()> {
        let source: Observable<Void> = Observable.create 
						{ [weak control = self.base] observer in
                MainScheduler.ensureRunningOnMainThread()

                guard let control = control else {
                    observer.on(.completed)
                    return Disposables.create()
                }

                let controlTarget = ControlTarget(control: control, controlEvents: controlEvents) { _ in
                    observer.on(.next(()))
                }

                return Disposables.create(with: controlTarget.dispose)
            }
            .takeUntil(deallocated)

        return ControlEvent(events: source)
    }

해당 컨트롤 이벤트가 발생할때마다 next 이벤트 방출 → Void

Extension Example Reactive TextField ControlEvent

extension Reactive where Base : UITextField{
    var editingDidBegin : ControlEvent<Void>{
        return controlEvent(.editingDidBegin)
    }
    
    var editingDidEnd : ControlEvent<Void>{
        return controlEvent(.editingDidEnd)
    }
    
    var borderColor : Binder<UIColor?>{
        return Binder(self.base) { base, color in
            base.layer.borderColor = color?.cgColor
        }
    }
}