“SingleEvent&lt; _&gt;”中的成员“成功”生成'SingleEvent <element>'类型的结果

时间:2018-06-09 17:42:07

标签: ios swift rx-swift

有人可以解释这里的错误是什么吗?

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

我使用泛型类型返回单个错误或成功 如果结果案例是.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 :(得分:0)

更改此

return Single.create { single in

进入这个

return Single<U>.create { single in

答案 1 :(得分:0)

get函数的返回类型为Single<U>,而调用single(.success(JSON))则通过指定具体类型Single<[String: Any]>违反了这一点。在U函数中用Dictionary<String, Any>替换通用类型get,或者使TaskRequestManager.run接受通用类型。