ios - RxSwift .asDriverOnErrorJustComplete() 不是核心/实用程序库的一部分

标签 ios mvvm reactive-programming rx-swift

试图找出如何使用 RxSwift 制作应用程序并探索多个开源项目(即 CleanArchitectureRxSwiftSwiftHub )我经常发现

extension ObservableType {

    func asDriverOnErrorJustComplete() -> Driver<E> {
        return asDriver { error in
            return Driver.empty()
        }
    }

}

鉴于此方法在许多情况下都很有用,并且在提到的项目中逐字复制,我想知道为什么它不是某些实用程序库(例如 RxSwiftExt)甚至 RxSwift 本身的一部分。

考虑到 SwiftHub Podfile 中有多少 Rx pod,我发现这真的很可疑它们实际上都不包含此功能。

我的问题是,这背后有什么真正的原因吗? asDriverOnErrorJustComplete 是否以某种方式违反了 Rx 契约(Contract)或被认为是不良做法等?

我是否有偏见,认为这两个项目很可能是相互复制的架构并且不具有代表性?如果是这样,是否有任何优秀的开源项目可以演示 RxSwift+MVVM 并可能避免 asDriverOnErrorJustComplete 或以不同的方式解决由 asDriverOnErrorJustComplete 解决的问题?

最佳答案

我不会将此方法称为不良做法本身,但它允许一个错误,该错误将被默默地忽略,我不是特别喜欢。使用这样的构造是相当有害的,因为你的链会在没有任何通知的情况下悄无声息地失败。如果您的 QA 部门(您戴的是另一顶帽子?)没有注意到标签不再更新这一事实,则可能会出现问题。

我也不太喜欢您提到的特定 GitHub 存储库,因为它们添加了很多恕我直言的不必要样板文件。我更喜欢更直接的代码。

在我的示例应用程序中 RxEarthquake ,我使用以下内容:

public func asDriverLogError(_ file: StaticString = #file, _ line: UInt = #line) -> SharedSequence<DriverSharingStrategy, E> {
    return asDriver(onErrorRecover: { print("Error:", $0, " in file:", file, " atLine:", line); return .empty() })
}

所以至少在debug中记录了错误。

我也认为以下是一个很好的选择:

public func asDriverOrAbort(_ file: StaticString = #file, _ line: UInt = #line) -> SharedSequence<DriverSharingStrategy, E> {
    return asDriver(onErrorRecover: { fatalError("Error: \($0) in file: \(file) atLine: \(line)") })
}

通过使用这样的方法,您向读者表明您绝对确定该链不会产生错误。

关于ios - RxSwift .asDriverOnErrorJustComplete() 不是核心/实用程序库的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55138672/

相关文章:

ios - UITableViewCell 按钮单击在 TableView 控件的多个部分中触发

WPF - 允许在单选按钮组中进行多项选择的错误

wpf - 如何自动缩放一组控件的字体大小?

java - RxJava : Find out if BehaviorSubject was a repeated value or not

angular - tap() 未在 RXJS 管道中触发

javascript - 如何使用 RxJS5 延迟重试发送 HTTP 请求?

ios - subview 未添加某些 UICollectionViewCells 并闪烁(以编程方式)

ios - 为什么 AVPlayer 在 'playbackBufferEmpty' 之后立即以 'playbackLikelyToKeepUp' 状态失败?

java - NotifyChange 依赖messageBox点击ZK

android - 如何在 native react 中不使用外部包的情况下添加/获取日历事件