我有两个UICollectionViewCells,我想区分两者。我的RetroItemCollectionViewCell有一个名为" configureFor"的方法。出于某种原因,即使我投了它,我也无法调用" configureFor"功能。
var cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)
if cell is RetroItemCollectionViewCell {
cell = cell as! RetroItemCollectionViewCell
let retroItem = self.retroItems[indexPath.row]
cell.configureFor(retroItem: retroItem)
} else if cell is RetroItemAddCollectionViewCell {
}
我做错了什么?
更新:
var cell :UICollectionViewCell!
// check if the cell is the add cell
if indexPath.row == 0 {
cell = collectionView.dequeueReusableCell(withReuseIdentifier: addRetroItemCollectionViewCellReuseIdentifier, for: indexPath) as! RetroItemAddCollectionViewCell
} else {
// HOW DO I CONVERT THE cell to RetroItemCollectionViewCell
let retroItem = self.retroItems[indexPath.row]
cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! RetroItemCollectionViewCell
}
答案 0 :(得分:3)
您正在搜索as?
运营商
作为? operator将表达式的条件转换执行到指定的类型。作为? operator返回指定类型的可选项。在运行时,如果转换成功,表达式的值将包装在一个可选的并返回;否则,返回的值为零。 - Swift Language Reference
var cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)
if let cell as? RetroItemCollectionViewCell {
let retroItem = self.retroItems[indexPath.row]
cell.configureFor(retroItem: retroItem)
} else if let cell as? RetroItemAddCollectionViewCell {
// ...
}