假设我有一个Field类,它的harvest函数如下:
class Field {
func harvest(handler: (Vegetable) -> Void) {
…
handler(carrot)
…
handler(potato)
…
handler(carrot)
…
}
}对于相同的函数,我还有一个反应性的版本/API:
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()
}
}
}为了测试目的,我创建了一个名为Field的子类,名为MockField,它覆盖harvest(:)来使用一组带存根的Vegetable来调用处理程序。
现在,我想对对field.rx.harvest的存根调用的响应扩展做同样的操作,但是我不能重写它来返回存根蔬菜!如何覆盖命名空间中的函数?
发布于 2016-12-13 08:04:27
可能最简单的方法不是子类化,而是根据harvest() -> Observable<Vegetable>定义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()
}
}
}这样做不需要维护harvest的两个实现。
PS:传递给一次性的块应该取消操作,而不是发送已完成的事件。如果没有取消harvest(handler:)__的工具,则只需返回Disposables.create()__即可。
https://stackoverflow.com/questions/41099777
复制相似问题