RxSwift 练习到 show/hide ActivityIndicator
RxSwift practice to show/hide ActivityIndicator
假设我们有这个伪代码代表网络请求调用和 show/hide 一个 activity 指标,使用 RxSwift:
func performRequest() {
isLoading.accept(true)
self.network.executeRequest()
.subscribe(onNext: {
self.isLoading.accept(false)
}, onError: {
self.isLoading.accept(false)
})
}
函数 executeRequest
returns Observable
或 Single
。
对于必须为 onNext/onSuccess 和 onError 编写两次相同的代码,我感到不舒服,基本上是一样的。
我正在寻找有关 minimize/improve 关闭 activity 指示器的建议,例如在单个语句中处理请求的所有事件并避免使用 subscribe
函数。或者还有其他建议?
您可以使用另一种方法订阅,在 Observer
的情况下通过 Event
或在 Single
的情况下通过 SingleEvent
:
subscribe(on: (Event<T>) -> Void)
subscribe(observer: (SingleEvent<T>) -> Void)
观察者示例:
func performRequest() {
isLoading.accept(true)
self.network.executeRequest().subscribe {
switch [=11=] {
case let .error(error):
print(error)
case let .next:
print("good")
case .completed:
print("also good")
}
isLoading.accept(false)
}
}
单个示例:
func performRequest() {
isLoading.accept(true)
self.network.executeRequest().subscribe {
switch [=12=] {
case let .error(error):
print(error)
case let .next:
print("good")
}
isLoading.accept(false)
}
}
我使用 RxSwift Example 应用程序中的 ActivityIndicator,这非常方便,特别是如果您并行加载多个内容,因为它维护了 运行 个订阅并发出 false
仅当此计数等于 0 时:
let isLoading = ActivityIndicator()
func performRequests() {
self.network
.executeFirstRequest()
.trackActivity(isLoading)
.subscribe {
// ...
}
self.network
.executeSecondRequest()
.trackActivity(isLoading)
.subscribe {
// ...
}
}
假设我们有这个伪代码代表网络请求调用和 show/hide 一个 activity 指标,使用 RxSwift:
func performRequest() {
isLoading.accept(true)
self.network.executeRequest()
.subscribe(onNext: {
self.isLoading.accept(false)
}, onError: {
self.isLoading.accept(false)
})
}
函数 executeRequest
returns Observable
或 Single
。
对于必须为 onNext/onSuccess 和 onError 编写两次相同的代码,我感到不舒服,基本上是一样的。
我正在寻找有关 minimize/improve 关闭 activity 指示器的建议,例如在单个语句中处理请求的所有事件并避免使用 subscribe
函数。或者还有其他建议?
您可以使用另一种方法订阅,在 Observer
的情况下通过 Event
或在 Single
的情况下通过 SingleEvent
:
subscribe(on: (Event<T>) -> Void)
subscribe(observer: (SingleEvent<T>) -> Void)
观察者示例:
func performRequest() {
isLoading.accept(true)
self.network.executeRequest().subscribe {
switch [=11=] {
case let .error(error):
print(error)
case let .next:
print("good")
case .completed:
print("also good")
}
isLoading.accept(false)
}
}
单个示例:
func performRequest() {
isLoading.accept(true)
self.network.executeRequest().subscribe {
switch [=12=] {
case let .error(error):
print(error)
case let .next:
print("good")
}
isLoading.accept(false)
}
}
我使用 RxSwift Example 应用程序中的 ActivityIndicator,这非常方便,特别是如果您并行加载多个内容,因为它维护了 运行 个订阅并发出 false
仅当此计数等于 0 时:
let isLoading = ActivityIndicator()
func performRequests() {
self.network
.executeFirstRequest()
.trackActivity(isLoading)
.subscribe {
// ...
}
self.network
.executeSecondRequest()
.trackActivity(isLoading)
.subscribe {
// ...
}
}