У меня есть 2 таких метода:
func rxGetAllTonicsForLanguage(language: Language) -> Observable<AnyObject?>
func saveTonics(list: [Tonic]) -> Observable<AnyObject?>
Теперь я хочу сначала выполнить вызов getAllTonics, а затем с результатом этого вызова выполнить следующее действие. Поэтому я подумал, что это то, что я могу сделать с FlatMap. Но я застрял, я не могу понять, как связать их.
Я пробовал следующее:
self.remoteService.rxGetAllTonicsForLanguage(language)
.subscribeOn(ConcurrentDispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
.flatMap{tonics -> Observable<[Tonic]> in
print("Tonics: \(tonics)")
let x = tonics as! [Tonic]
return TonicAdapter.sharedInstance.saveTonics(x)
}.observeOn(MainScheduler.instance)
.subscribe({ e in
switch e {
case .Next(let element):
if let result = element as? String {
DDLogDebug("Saved something \(result)")
}
case .Error(let e):
DDLogError("Error in save tonics \(e)")
case .Completed:
DDLogDebug("Completed save tonics")
}
}
).addDisposableTo(self.disposeBag)
Это дает мне эту ошибку в строке возврата TonicAdapter:
Cannot convert return expression of type 'Observable<AnyObject?>' (aka 'Observable<Optional<AnyObject>>') to return type 'Observable<[Tonic]>' (aka 'Observable<Array<Tonic>>')
Я не вижу проблемы, потому что оба метода возвращают Observables?
saveTonics
, сObservable<AnyObject?>
наObservable<[Tonic]>
. Или вы можете применить то же изменение (если вы уверены, что так будет всегда). - person Putz1103   schedule 07.07.2016