Gas*_*sim 2 uicollectionview swift 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)
}
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个构建错误:
没有“项目”候选项产生预期的上下文结果类型“((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)
Run Code Online (Sandbox Code Playgroud)
此代码正常工作。我究竟做错了什么?
我能够重现您收到的错误消息。您没有为ProductCell的setProduct()方法发布代码,但是我想您可能遇到与我相同的问题。
这是我的虚拟ProductCell实现:
class ProductCell: UICollectionViewCell {
func setProduct(product: Product) {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在您的答案中使用代码时:
productsObservable.bindTo(collectionViewProducts.rx.items(cellIdentifier: "ProductCell", cellType: ProductCell.self)) { (row, element, cell) in
cell.setProduct(element)
}
.disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
我得到的错误与您相同:
没有“项目”候选项产生预期的上下文结果类型“((Observable <[Product]>)->(_)-> _”
就我而言,问题是我product在调用时忘记了参数标签setProduct:
添加参数标签后,代码将正确编译:
productsObservable.bindTo(collectionViewProducts.rx.items(cellIdentifier: "ProductCell", cellType: ProductCell.self)) { (row, element, cell) in
cell.setProduct(product: element)
}
.disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器的错误消息非常容易引起误解。当您尝试setProduct(element)在闭包之外调用时,您将获得正确的错误消息:
通话中缺少参数标签“ product:”
但是以某种方式,当编译器位于闭包内部时,编译器无法意识到问题出在哪里。
正如我之前提到的,我不知道你是如何实现setProduct你ProductCell,而是因为你在呼唤cell.setCategory(category: element)你的UITableView例子,我认为你的问题是缺少的参数标签,当你调用cell.setProduct(element)
| 归档时间: |
|
| 查看次数: |
3906 次 |
| 最近记录: |