Ios 反应套件:观察一系列信号,完成后做些什么

Ios 反应套件:观察一系列信号,完成后做些什么,ios,swift,reactivekit,Ios,Swift,Reactivekit,我对反应式编程非常陌生,在我的应用程序中使用Bond with ReactiveKit。我现在遇到了一个我不太明白的问题 问题是,在某个页面上,我必须上传一些图像,当所有图像都上传后,我想做些什么 这是我目前掌握的代码: func上载映像(completionHandler:@escaping EmptyBlock){ 让datas=profileImages.value.compactMap{$0?.jpegData(压缩质量:0.6)} 让signals=datas.map{data in

我对反应式编程非常陌生,在我的应用程序中使用Bond with ReactiveKit。我现在遇到了一个我不太明白的问题

问题是,在某个页面上,我必须上传一些图像,当所有图像都上传后,我想做些什么

这是我目前掌握的代码:

func上载映像(completionHandler:@escaping EmptyBlock){
让datas=profileImages.value.compactMap{$0?.jpegData(压缩质量:0.6)}
让signals=datas.map{data in
返回信号{observer in
self.user.uploadImage(数据:data){结果为
切换结果{
成功案例(让url):
observer.receive(url)
observer.receive(完成:.finished)
案例。失败(let错误):
observer.receive(完成:。失败(错误))
}
}
返回SimpleDisposable(isDisposed:false)
}
}
//“信号”怎么办?
}
所以我有一个属性
profileImages
,它是UIImage数组的一个可观察属性。执行
uploadImages
时,我希望使用函数
user.uploadImage
上载所有图像,并且在所有上载完成后,我希望调用
uploadImages
函数的
completionHandler


此时,我有一系列信号,但我不知道如何观察所有信号,或者如何将它们组合成一个信号?

我认为如果您稍微分解一下函数,会对您有所帮助:

extension User {
    func uploadImage(data: Data) -> Signal<String, Error> {
        return Signal { observer in
            self.uploadImage(data: data) { result in
                switch result {
                case .success(let url):
                    observer.receive(url)
                    observer.receive(completion: .finished)
                case .failure(let error):
                    observer.receive(completion: .failure(error))
                }
            }
            return SimpleDisposable(isDisposed: false)
        }
    }
}

我想如果你把函数稍微分解一下,会对你有所帮助:

extension User {
    func uploadImage(data: Data) -> Signal<String, Error> {
        return Signal { observer in
            self.uploadImage(data: data) { result in
                switch result {
                case .success(let url):
                    observer.receive(url)
                    observer.receive(completion: .finished)
                case .failure(let error):
                    observer.receive(completion: .failure(error))
                }
            }
            return SimpleDisposable(isDisposed: false)
        }
    }
}