gpt4 book ai didi

ios - 为 stub 创建 RxSwift/Reactive 扩展的子类

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:13 24 4
gpt4 key购买 nike

假设我有一个带有 harvest 函数的 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()
}
}
}

出于测试目的,我创建了一个名为 MockFieldField 子类,它覆盖了 harvest(:) 以使用一组 stub Vegetable。当使用像 field.harvest(:) 这样的 MockField 对象时,一切正常,我得到了蔬菜残渣。

现在我想对 Reactive 扩展执行同样的操作,以对 field.rx.harvest 进行 stub 调用,但我无法覆盖它以返回 stub 的 Vegetables! 如何覆盖 rx 命名空间中的函数?

最佳答案

可能最简单的方法不是子类化,而是定义 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:传递给一次性的 block 应该取消操作,而不是发送完成的事件。如果没有设施可以取消harvest(handler:) , 你可以简单地返回 Disposables.create() .

关于ios - 为 stub 创建 RxSwift/Reactive 扩展的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41099777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com