2014-11-10 22 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) 
} 

Devo verificare se esiste un elemento in un indice specificato. Tuttavia il codice di cui sopra non funziona, ottengo l'errore di generazione:Swift, controlla se l'array ha valore all'indice

Conditional downcast from CGFloat to CGFloat always succeeds

ho anche provato con:

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

ma anche questo non è riuscita:

Bound value in a conditional binding must be of Optional type 

Tutte le idee che cosa è sbagliato?

risposta

8

cellHeights è un array contenente CGFloat non opzionale. Quindi nessuno dei suoi elementi non può essere nullo, in quanto tale se l'indice esiste, l'elemento su quell'indice è un CGFloat.

cosa si sta cercando di fare è qualcosa che è possibile solo se si crea un serie di optionals:

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

e in tal caso l'opzione vincolante dovrebbe essere utilizzato come segue:

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

Vi suggerisco di leggere di nuovo su Optionals

Problemi correlati