首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类RxSwift/反应扩展

子类RxSwift/反应扩展
EN

Stack Overflow用户
提问于 2016-12-12 11:25:00
回答 1查看 1K关注 0票数 4

假设我有一个Field类,它的harvest函数如下:

代码语言:javascript
复制
class Field {

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

对于相同的函数,我还有一个反应性的版本/API:

代码语言:javascript
复制
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的存根调用的响应扩展做同样的操作,但是我不能重写它来返回存根蔬菜!如何覆盖命名空间中的函数?

EN

回答 1

Stack Overflow用户

发布于 2016-12-13 08:04:27

可能最简单的方法不是子类化,而是根据harvest() -> Observable<Vegetable>定义Field.harvest(handler:)

代码语言:javascript
复制
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()__即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41099777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档