Ответ RxSwift API - PullRequest
       16

Ответ RxSwift API

0 голосов
/ 25 апреля 2019

Меня сбивает с толку следующий код, который работает, если я раскомментирую код, указанный ниже.Если я это прокомментирую, это не сработает.Я понятия не имею, в чем проблема:

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
}

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Я еще не работал с Moya.

Но, похоже, вам нужно .subscribe, чтобы .request заработало.

0 голосов
/ 26 апреля 2019

Вам необходимо подписаться на наблюдаемое pRepos, чтобы отправить сетевой запрос, поскольку наблюдаемое ожидает, пока наблюдатель не подпишется на него, прежде чем он начнет излучать элементы, и начнет передавать значения наблюдателям при вызове подписки.

Так что в вашем случае

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 <[Repository]>

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