【问题标题】:Member 'success' in 'SingleEvent<_>' produces result of type 'SingleEvent<Element>''SingleEvent<_>' 中的成员 'success' 产生类型为 'SingleEvent<Element>' 的结果
【发布时间】:2018-06-09 17:42:07
【问题描述】:

谁能解释这里的错误是什么?

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

我使用泛型类型返回 Single 错误或成功 如果结果案例是 .success 我想在单个事件中传递 JSON

这是完整的代码

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()
            }
    }
        }
}

【问题讨论】:

    标签: ios swift rx-swift


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      改一下

      return Single.create { single in
      

      进入这个

      return Single<U>.create { single in
      

      【讨论】:

        猜你喜欢
        • 2018-03-16
        • 2014-01-06
        • 1970-01-01
        • 2011-07-03
        • 2012-04-07
        • 2017-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多