没有“项目”候选者产生预期的上下文结果类型'(Observable< [Product]>) - > (_) - > _'

时间:2017-03-24 19:43:55

标签: swift uicollectionview rx-swift rx-cocoa

这是我的代码段:

class ProductCategoryCell: UITableViewCell {

  @IBOutlet weak var collectionViewProducts: UICollectionView!

  // other stuff...

  func setProducts() {
    let productsObservable = Observable.just([
      Product(name: "test", price: 10.0),
      Product(name: "test", price: 10.0),
      Product(name: "test", price: 10.0)
    ])

    productsObservable.bindTo(collectionViewProducts.rx.items(cellIdentifier: "ProductCell", cellType: ProductCell.self)) {
      (row, element, cell) in
      cell.setProduct(element)
    }.disposed(by: disposeBag)
  }
}

它给了我一个构建错误:

  

没有“项目”候选者产生预期的上下文结果类型'(Observable< [Product]>) - > (_) - > _'

在我的视图控制器中,我使用类似的代码填充表视图:

let productsObservable = Observable.just(testProducts)
productsObservable.bindTo(tableViewProducts.rx.items(cellIdentifier: "ProductCategoryCell", cellType: ProductCategoryCell.self)) { (row, element, cell) in
        cell.setCategory(category: element)
}.disposed(by: disposeBag)

此代码适用于。我做错了什么?

1 个答案:

答案 0 :(得分:4)

我能够重现您收到的错误消息。您没有发布ProductCell的{​​{1}}方法的代码,但我猜您可能遇到了与我相同的问题。

这是我的虚拟setProduct()实施:

ProductCell

现在,当我在你的答案中使用代码时:

class ProductCell: UICollectionViewCell {
    func setProduct(product: Product) {
        // do stuff
    }
}

我得到的错误与你相同:

  

没有“项目”候选人产生预期的上下文结果类型   '(Observable< [Product]>) - > (_) - > _'

就我而言,问题是我在调用productsObservable.bindTo(collectionViewProducts.rx.items(cellIdentifier: "ProductCell", cellType: ProductCell.self)) { (row, element, cell) in cell.setProduct(element) } .disposed(by: disposeBag)

时忘记了参数标签product

添加参数标签后,代码编译时没有错误:

setProduct:

在这种情况下,编译器的错误消息非常容易引起误解。当您尝试在闭包之外调用productsObservable.bindTo(collectionViewProducts.rx.items(cellIdentifier: "ProductCell", cellType: ProductCell.self)) { (row, element, cell) in cell.setProduct(product: element) } .disposed(by: disposeBag) 时,您将收到正确的错误消息:

  

在通话中缺少参数标签'product:'

但是不知何故,当编译器进入闭包时,编译器并没有意识到问题到底是什么。

正如我之前提到的,我不知道您在setProduct(element)中如何实施setProduct,但因为您在ProductCell示例中呼叫cell.setCategory(category: element)我认为您的调用UITableView

时,问题是缺少参数标签