假设我有一个带有收集函数的Field类,如下所示:
class Field {
func harvest(handler: (Vegetable) -> Void) {
…
handler(carrot)
…
handler(potato)
…
handler(carrot)
…
}
}
我也有一个相同功能的Reactive版本/ 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()
}
}
}
出于测试目的,我创建了一个名为MockField的Field的子类,它覆盖了harvest(:)以使用一组stubbed Vegetables调用处理程序.当使用像field.harvest(:)这样的MockField对象时,一切正常,我得到了茬蔬菜.
现在我想对存根调用field.rx.harvest的Reactive扩展做同样的事情,但我不能覆盖它来返回stubbed Vegetables!如何覆盖rx命名空间中的函数?
最佳答案 可能最简单的方法不是子类化,而是定义harvest() – >可观察到的与LT;蔬菜及GT;就Field.harvest而言(处理程序:)
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()
}
}
}
这样做你不需要维护两个收获实现.
PS:传递给一次性的块应该取消动作,而不是发送完成的事件.如果没有设施取消收获(处理程序:),您只需返回Disposables.create().