var cellHeights: [CGFloat] = [CGFloat]()

if let height = self.cellHeights[index] as? CGFloat {
    self.cellHeights[index] = cell.frame.size.height
} else {
    self.cellHeights.append(cell.frame.size.height)
}

我需要检查指定索引处的元素是否存在。但是上面的代码不起作用,我得到构建错误:



我也尝试过:
if let height = self.cellHeights[index] {}

但这也失败了:
Bound value in a conditional binding must be of Optional type

有什么想法怎么了?

最佳答案

cellHeights是一个包含非可选CGFloat的数组。因此,它的任何元素都不能为nil,因为如果存在索引,则该索引上的元素是CGFloat

您试图做的事情只有在创建一个可选数组数组时才可能实现:

var cellHeights: [CGFloat?] = [CGFloat?]()

在这种情况下,可选绑定(bind)应按以下方式使用:
if let height = cellHeights[index] {
    cellHeights[index] = cell.frame.size.height
} else {
    cellHeights.append(cell.frame.size.height)
}

我建议您再次阅读有关Optionals的信息

08-27 19:25