gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 05:32:20 25 4
gpt4 key购买 nike

试图找出如何使用 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/

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