Член 'success' в 'SingleEvent <_>' создает результат типа 'SingleEvent <Element>' - PullRequest
0 голосов
/ 09 июня 2018

Может кто-нибудь объяснить, в чем здесь ошибка?

Member 'success' in 'SingleEvent<_>' produces result of type 'SingleEvent<Element>', but context expects 'SingleEvent<_>'

Я возвращаю Single или ошибку или успех с универсальным типом, если в качестве результата получен .success. Я хочу передать JSON в одном событии

enter image description here

это полный код

import Foundation
import RxSwift

public class APIClient<T: APIProtocol> {
    var disposeBag: DisposeBag = DisposeBag()
}

extension APIClient {
    public func get<U>(apiService: T, key: String) -> Single<U> {
        return Single.create { single in

            let task = TaskRequestManager.run(apiService, completion: { result in
                DispatchQueue.main.async {
                    switch result {

                    case .error(let error):
                        single(.error(error))
                    case .success(let json):

                        guard let JSON = json[key] as? [String: Any] else {
                            single(.error(ApiError.jsonParsingFailure))
                            return
                        }
                        single(.success(JSON))
                    }
                }

            })
            task.resume()
            return Disposables.create {
                task.cancel()
            }
    }
        }
}

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Тип возврата функции get равен Single<U>, в то время как вызов single(.success(JSON)) нарушает это, указывая конкретный тип Single<[String: Any]>.Либо замените универсальный тип U на Dictionary<String, Any> в функции get, либо заставьте TaskRequestManager.run принять универсальный тип.

0 голосов
/ 10 июня 2018

изменить это

return Single.create { single in

на это

return Single<U>.create { single in
...