Ios RxSwift显示/隐藏活动指示器的实践

Ios RxSwift显示/隐藏活动指示器的实践,ios,swift,rx-swift,Ios,Swift,Rx Swift,假设我们有表示网络请求调用的伪代码,并使用RxSwift显示/隐藏活动指示器: func performRequest() { isLoading.accept(true) self.network.executeRequest() .subscribe(onNext: { self.isLoading.accept(false) }, onError: { self.isLoading.accept(false

假设我们有表示网络请求调用的伪代码,并使用RxSwift显示/隐藏活动指示器:

func performRequest() {
   isLoading.accept(true)
   self.network.executeRequest()
       .subscribe(onNext: {
           self.isLoading.accept(false)
       }, onError: {
           self.isLoading.accept(false)
       })
}
函数
executeRequest
返回一个
可观察的
单个

我对必须为onNext/onSuccess和onError编写两次相同的代码感到不舒服,基本上都是这样做的


我正在寻找最小化/改进关闭活动指示器的建议,例如在单个语句中处理请求的所有事件,避免使用
subscribe
功能。或者可能还有其他建议?

您可以使用另一种方法进行订阅,如果是
Observer
则传递
Event
,如果是
Single
,则传递
SingleEvent

subscribe(on: (Event<T>) -> Void)
subscribe(observer: (SingleEvent<T>) -> Void)

单一示例:
您可以使用另一种方法进行订阅,如果是
观察者
则传递
事件
,如果是
单一
,则传递
单一事件

subscribe(on: (Event<T>) -> Void)
subscribe(observer: (SingleEvent<T>) -> Void)

单一示例: 我使用了from RxSwift示例应用程序,这使它非常方便,尤其是当您并行加载多个内容时,因为它保持了正在运行的订阅计数,并且仅当此计数等于0时才会发出
false

let isLoading=ActivityIndicator()
func performRequests(){
自我网络
.executeFirstRequest()
.trackActivity(isLoading)
.订阅{
// ...
}
自我网络
.executeSecondRequest()
.trackActivity(isLoading)
.订阅{
// ...
}
}
我使用RxSwift示例应用程序,这使它非常方便,尤其是当您并行加载多个内容时,因为它保持了正在运行的订阅计数,并且仅当此计数等于0时才会发出
false

let isLoading=ActivityIndicator()
func performRequests(){
自我网络
.executeFirstRequest()
.trackActivity(isLoading)
.订阅{
// ...
}
自我网络
.executeSecondRequest()
.trackActivity(isLoading)
.订阅{
// ...
}
}


我有点困惑:函数
executeRequest
返回一个
可观察的
单个
。你能再解释一下吗?@Erumaru那只是伪代码,这意味着函数
executeRequests
只是一个虚构的函数,但它实际上代表了与网络相关的函数,这些函数要么返回一个可观察的,要么返回一个。好的,我已经更新了我的答案,以涵盖这两种情况。我有点困惑:函数
executeRequest
返回一个
可观察的
单个
。你能再解释一下吗?@Erumaru那只是伪代码,这意味着函数
executeRequests
只是一个虚构的函数,但它实际上代表了与网络相关的函数,这些函数要么返回一个可观察的函数,要么返回一个。好的,我已经更新了我的答案,以涵盖这两种情况。谢谢回答。我想我在这件事上的问题没有那么完整:/。我知道这个
subscribe
功能,它可以解决我的问题。问题是我想避免使用subscribe。我宁愿使用
do
函数,但它没有类似的功能。@OlegDanu嗯,好的。然后,我没有回答这个问题。@OlegDanu你可以选择看看PromiseKit。没有太多理由添加另一个依赖项。@OlegDanu好的,我在这里留下我的答案,可能会帮助其他人。希望你能找到答案!谢谢你的回答。我想我在这件事上的问题没有那么完整:/。我知道这个
subscribe
功能,它可以解决我的问题。问题是我想避免使用subscribe。我宁愿使用
do
函数,但它没有类似的功能。@OlegDanu嗯,好的。然后,我没有回答这个问题。@OlegDanu你可以选择看看PromiseKit。没有太多理由添加另一个依赖项。@OlegDanu好的,我在这里留下我的答案,可能会帮助其他人。希望你能找到答案!谢谢@jegnux。看起来这正是我需要的。我本打算回答这个问题,但上面的内容正是我所建议的,所以我投了更高的票。回答得好@jegnux@杰德努斯:我现在有点困惑。看起来,
ActivityIndicator
没有随RxSwift库提供。它仅在RxExample文件夹中可用。这是否意味着我需要复制/粘贴代码才能使用它?还是我缺少了一个
导入
之类的东西?谢谢@jegnux。看起来这正是我需要的。我本打算回答这个问题,但上面的内容正是我所建议的,所以我投了更高的票。回答得好@jegnux@杰德努斯:我现在有点困惑。看起来,
ActivityIndicator
没有随RxSwift库提供。它仅在RxExample文件夹中可用。这是否意味着我需要复制/粘贴代码才能使用它?还是我缺少了一个
导入
之类的东西?
func performRequest() {
    isLoading.accept(true)
    self.network.executeRequest().subscribe {
        switch $0 {
        case let .error(error):
            print(error)
        case let .next:
            print("good")
        }
        isLoading.accept(false)
    }
}