RxSwift .asDriverOnErrorJustComplete() 不是 core/utility 库的一部分

RxSwift .asDriverOnErrorJustComplete() not being part of core/utility library

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

的用法
extension ObservableType {

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

}

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

我真的很怀疑 SwiftHub Podfile none 中有多少 Rx pods 实际上包含此功能。

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

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

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

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

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

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

所以至少在调试时记录了错误。

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

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

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

我认为 asDriverOnErrorJustComplete 不包含在标准库中,因为对于除 void 之外的任何类型的可观察对象,应用程序在收到错误时都会崩溃。

当我开始编写 SwiftHub 时,我无法理解为什么当我从服务器收到错误时应用程序会崩溃 :)