Swift,检查数组是否在索引处有值

Upv*_*ote 5 nsarray ios swift

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)
}
Run Code Online (Sandbox Code Playgroud)

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

从CGFloat到CGFloat的条件下转总是成功的

我也尝试过:

if let height = self.cellHeights[index] {}
Run Code Online (Sandbox Code Playgroud)

但这也失败了:

Bound value in a conditional binding must be of Optional type
Run Code Online (Sandbox Code Playgroud)

任何想法都错了吗?

Ant*_*nio 8

cellHeights是一个包含非可选的数组CGFloat.所以它的任何元素都不能为nil,因此如果索引存在,那个索引上的元素就是a CGFloat.

你想要做的只有在你创建一个可选项数组时才有可能:

var cellHeights: [CGFloat?] = [CGFloat?]()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,可选的绑定应使用如下:

if let height = cellHeights[index] {
    cellHeights[index] = cell.frame.size.height
} else {
    cellHeights.append(cell.frame.size.height)
}
Run Code Online (Sandbox Code Playgroud)

我建议你再读一下Optionals