我有一个cellForItemAtIndexPath
方法,我正在使用UICollectionView
。重用标识符取决于indexPath,因此我计划执行以下操作:
var reuseIdentifier: String
if indexPath.row == 0 {
reuseIdentifier = "One"
} else if indexPath.row == 1 {
reuseIdentifier = "Two"
} else if indexPath.row == 2 {
reuseIdentifier = "Three"
}
var cell: UICollectionViewCell = collectionView.dequeueReusableCellWithIdentifier(reuseIdentifier, indexPath:indexPath)
这是对的吗? reuseIdentifier
应该是一个可选的字符串,还是正常的?
此外,我是否在nil
案例中正确处理了它?如果它不是2,reuseIdentifier
没有,对吧? (这与nil不同?)我应该清楚地处理这个问题,对吗?
答案 0 :(得分:1)
为什么不这样简单呢?
let reuseIdentifier = ["One", "Two", "Three"][indexPath.row]
注意:如果indexPath.row > 2
,这会崩溃。如果发生这种情况,那么你应该更加小心。你可能会考虑这样的事情:
extension Array {
func at(index: Int) -> T? {
if index >= count {
return nil
} else {
return self[index]
}
}
}
// ...
let reuseIdentifier: String? = ["One", "Two", "Three"].at(indexPath.row) // might be nil
答案 1 :(得分:0)
如果声明var
非可选类型并且从不分配给它,那就是编译时错误。
如果你想让它为零,你需要将它声明为可选项。然后你需要妥善处理它为零的情况 - 因为表格会接受一个零单元格,你可以这样做。