【问题标题】:No 'items' candidates produce the expected contextual result type '(Observable<[Product]>) -> (_) -> _'没有“项目”候选产生预期的上下文结果类型 '(Observable<[Product]>) -> (_) -> _'
【发布时间】:2017-03-24 19:43:54
【问题描述】:

这是我的代码 sn-p:

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

它给了我一个构建错误:

没有'items'候选产生预期的上下文结果类型'(Observable) -> (_) -> _'

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

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)

此代码正常工作。我做错了什么?

【问题讨论】:

    标签: swift uicollectionview rx-swift rx-cocoa


    【解决方案1】:

    我能够重现您收到的错误消息。您没有发布 ProductCellsetProduct() 方法的代码,但我想您可能遇到与我相同的问题。

    这是我的虚拟ProductCell 实现:

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

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

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

    我得到了和你一样的错误:

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

    就我而言,问题是我在调用setProduct: 时忘记了参数标签product

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

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

    在这种情况下,编译器的错误信息非常具有误导性。当您尝试在闭包之外调用 setProduct(element) 时,您会收到正确的错误消息:

    调用中缺少参数标签“产品:”

    但不知何故,当他在闭包内时,编译器并没有意识到问题到底出在哪里。

    正如我之前提到的,我不知道您是如何在 ProductCell 中实现 setProduct 的,但是因为您在 UITableView 示例中调用了 cell.setCategory(category: element),所以我假设您的问题是当您拨打cell.setProduct(element)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多