Subsorting RxSwift / Extensión reactiva para el apéndice

Supongamos que tengo una class Field con una function de harvest como esta:

 class Field { func harvest(handler: (Vegetable) -> Void) { … handler(carrot) … handler(potato) … handler(carrot) … } } 

También tengo una versión reactiva / API para la misma function:

 import RxSwift extension Reactive where Base: Field { func harvest() -> Observable<Vegetable> { return Observable.create { observer in self.base.harvest(handler: observer.onNext) return Disposables.create() } } } 

Para propósitos de testing, creé una subclass de Field llamada MockField que anula la harvest(:) para invocar al manejador con un set de Vegetable aplastados. Al usar el object MockField como field.harvest(:) todo funciona bien y obtengo los vegetales aplastados.

Ahora quiero hacer lo mismo con la extensión Reactiva para field.rx.harvest llamadas a field.rx.harvest , ¡pero no puedo anularlo para devolver Verduras aplastadas! ¿Cómo puedo anular las funciones en el espacio de nombres rx ?

Probablemente la forma más fácil de hacerlo no sea subclasificar, sino definir la harvest() -> Observable<Vegetable> en términos de Field.harvest(handler:)

 import RxSwift extension Reactive where Base: Field { func harvest() -> Observable<Vegetable> { return Observable.create { observer in self.base.harvest(handler: observer.onNext) return Disposables.create() } } } 

Si lo hace de esta manera, no necesitará mantener dos implementaciones de harvest .

PS: El bloque pasado a un desechable debería cancelar la acción, no enviar el evento completado. Si no hay posibilidad de cancelar la harvest(handler:) , simplemente puede regresar a Disposables.create() .