2014-11-10 3 views
5
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) 
} 

Мне нужно проверить, существует ли элемент с указанным индексом. Однако приведенный выше код не работает, я получаю ошибку компиляции:Swift, проверьте, имеет ли массив значение по индексу

Conditional downcast from CGFloat to CGFloat always succeeds

Я также попытался с:

if let height = self.cellHeights[index] {} 

, но это также не удалось:

Bound value in a conditional binding must be of Optional type 

Любые идеи, что не так?

ответ

8

cellHeights - массив, содержащий необязательные CGFloat. Таким образом, любой из его элементов не может быть nil, как таковой, если индекс существует, элемент в этом индексе является CGFloat.

То, что вы пытаетесь сделать что-то, что это возможно, только если вы создаете массив дополнительных опций:

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

и в этом случае дополнительного связывания следует использовать следующий образ:

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

Предлагаю вам прочитать дополнительную информацию о Optionals

Смежные вопросы