title: What does the following example code from RxSwift/RxCocoa do?
body: <p>I'm trying to understand in detail</p>
  
  <pre><code>.drive(resultsTableView.rx_itemsWithCellIdentifier("WikipediaSearchCell",
         cellType: WikipediaSearchCell.self)) 
            { (_, viewModel, cell) in
                cell.viewModel = viewModel
            }
  </code></pre>
  
  <p>from WikipediaSearchViewController.swift lines 47-64.
  I've tried to extract the arguments to look at the concrete type signatures, but a rewrite to</p>
  
  <pre><code>    let temp1 = searchBar.rx_text
          .asDriver()
          .throttle(0.3)
          .distinctUntilChanged()
          .flatMapLatest { query in
              API.getSearchResults(query)
                  .retry(3)
                  .retryOnBecomesReachable([], reachabilityService: ReachabilityService.sharedReachabilityService)
                  .startWith([]) // clears results on new search term
                  .asDriver(onErrorJustReturn: [])
          }
          .map { results in
              results.map(SearchResultViewModel.init)
      }
  
      let driveArg1 = resultsTableView.rx_itemsWithCellIdentifier("WikipediaSearchCell", cellType: WikipediaSearchCell.self)
      let driveArg2 = { (_, viewModel: SearchResultViewModel, cell: WikipediaSearchCell) in
          cell.viewModel = viewModel
      }
      temp1.drive(driveArg1, curriedArgument: driveArg2)
          .addDisposableTo(disposeBag)
  </code></pre>
  
  <p>gives </p>
  
  <blockquote>
    <p>cannot invoke 'rx_itemsWithCellIdentifier' with an argument list of type '(String, cellType: UITableViewCell.Type)'</p>
  </blockquote>
  
  <p>for driveArg1 and</p>
  
  <blockquote>
    <p>type of expression is ambiguous without more context</p>
  </blockquote>
  
  <p>for driveArg2.</p>
  
  <p>The signatures of <code>drive</code> and <code>rx_itemsWithCellIdentifier</code> are</p>
  
  <pre><code>public func drive&lt;R1, R2&gt;(with: Self -&gt; R1 -&gt; R2, curriedArgument: R1) -&gt; R2 {}
  
  public func rx_itemsWithCellIdentifier(cellIdentifier: String, cellType: Cell.Type = Cell.self)(source: O)(configureCell: (Int, S.Generator.Element, Cell) -&gt; Void) -&gt; Disposable {}
  </code></pre>
  
  <p>but at this point Swift syntax is darn incomprehensible for me. Can anyone explain the signatures and what happens in the code?</p>