web-dev-qa-db-fra.com

RxSwift: L'argument supplémentaire 'onError' lors d'un abonnement à un observable <String>

J'ai le code suivant:

let fetcher = DiagnosticFetcher(commandSender: sender)
fetcher.fetch()
    .observeOn(MainScheduler.instance)
    .subscribe(
       onNext: { self.store.save(content: $0) },
       onError: { self.view.showError("Error") },
       onCompleted: { log.verbose("Diagnostic fetched") })

Il ne compile pas: Extra argument 'onError' in call. J'obtiens la même erreur si j'utilise onSuccess ou onDoesNotExistButShowTheBug au lieu de onNext.

La méthode fetch() renvoie un Observable<String> (dont le dernier opérateur est une reduce). Il semble que l'appel subscribe() n'attende qu'un seul lambda:

fetcher.fetch()
   .observeOn(MainScheduler.instance)
   .subscribe(onNext: { self.store.save(content: $0) })

Résultats en: Extraneous argument label 'onNext:' in call. Et:

fetcher.fetch()
   .observeOn(MainScheduler.instance)
   .subscribe({ self.store.save(content: $0) })

compile bien.

J'ai l'impression de ne pas avoir la bonne implémentation de subscribe(). Je veux celui-ci:

public func subscribe(onNext: ((ElementType) -> Void)? = nil,
                      onError: ((Swift.Error) -> Void)? = nil,
                      onCompleted: (() -> Void)? = nil) -> Disposable {

mais évidemment, le compilateur ne le fait pas. J'utilise XCode 9.2 avec Swift 4 et RxSwift 4.1.1.

J'ai d'autres parties dans mon application qui utilisent le onNext:onError: sur un observable où cela fonctionne. Je ne peux pas mettre le doigt sur ce qui est différent pour cet appel.

Toute réflexion sur la façon dont je peux identifier la racine du problème?

4
fstephany

Je l’ai compilé en spécifiant le premier paramètre dans la variable onError lambda:

fetcher.fetch()
   .observeOn(MainScheduler.instance)
   .subscribe(
      onNext: { self.store.save(content: $0) },
      onError: { _ in self.view.showError("Error")})
1
fstephany