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 时,我无法理解为什么当我从服务器收到错误时应用程序会崩溃 :)
试图找出如何使用 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 时,我无法理解为什么当我从服务器收到错误时应用程序会崩溃 :)