【问题标题】:RxSwift API responseRxSwift API 响应
【发布时间】:2019-04-25 10:53:50
【问题描述】:

如果我取消注释下面的注释代码,我会被下面的代码迷惑。如果我评论它,它不起作用。我不知道问题是什么:

func getMostPopularRepositories(byLanguage language: String) -> Observable<[Repository]> {
  let encodedLanguage = language.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!

  let provider = MoyaProvider<Github>(plugins: [NetworkLoggerPlugin(verbose: true)])
  let parameters = [“q”: “language:\(encodedLanguage)“,“sort”: “stars”]

  /*
  provider.rx
    .request(.repositories(parameters))
    .map([Repository].self, atKeyPath: “items”)
    .subscribe { event in
  }.dispose()
  */

  let request = provider.rx.request(.repositories(parameters)).asObservable()
  // RxSwift.(unknown context at $101ccc3e8).AnonymousObservable<Moya.Response>
  print(request)
  let pRepos = request.map([Repository].self, atKeyPath: “items”)
  // RxSwift.(unknown context at $101ccf26c).FlatMap<Moya.Response, RxSwift.Observable<Swift.Array<RepoSearcher.Repository>>>
  print(pRepos)
  return pRepos
}

【问题讨论】:

    标签: swift rx-swift


    【解决方案1】:

    我还没有与Moya 合作过。

    但您似乎需要.subscribe 才能使.request 工作。

    【讨论】:

      【解决方案2】:

      您需要订阅 pRepos observable 来发送网络请求,因为 observable 会等待观察者订阅它,然后开始发射项目,并在调用 subscribe 时开始向观察者推送值。

      所以你的情况

      func getMostPopularRepositories(byLanguage language: String) -> Observable<[Repository]> {
          let encodedLanguage = language.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!
      
          let provider = MoyaProvider<Github>(plugins: [NetworkLoggerPlugin(verbose: true)])
          let parameters = [“q”: “language:\(encodedLanguage)“,“sort”: “stars”]
      
          let request = provider.rx.request(.repositories(parameters)).asObservable()
          // RxSwift.(unknown context at $101ccc3e8).AnonymousObservable<Moya.Response>
          print(request)
          let pRepos = request.map([Repository].self, atKeyPath: “items”)
          // RxSwift.(unknown context at $101ccf26c).FlatMap<Moya.Response, RxSwift.Observable<Swift.Array<RepoSearcher.Repository>>>
          print(pRepos)
          return pRepos
      }
      

      // 订阅 Observable 的代码

      let disposeBag = DisposeBag()
      let popularReposObservable: Observable<[Repository]> =   getMostPopularRepositories(byLanguage: "English")
      popularReposObservable
          .observeOn(MainScheduler.instance)
          .subscribe(onNext: { (popularRepos: [Repository]) in
              print(popularRepos)
          })
          .disposed(by: disposeBag)
      

      【讨论】:

        猜你喜欢
        • 2017-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-26
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 2016-10-19
        相关资源
        最近更新 更多