- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
试图找出如何使用 RxSwift 制作应用程序并探索多个开源项目(即 CleanArchitectureRxSwift 和 SwiftHub )我经常发现
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/
试图找出如何使用 RxSwift 制作应用程序并探索多个开源项目(即 CleanArchitectureRxSwift 和 SwiftHub )我经常发现 extension ObservableTy
我是一名优秀的程序员,十分优秀!