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

Muszę sprawdzić, czy element o określonym indeksie istnieje. Jednakże powyższy kod nie działa, pojawia się błąd kompilacji:Swift, sprawdź, czy tablica ma wartość na indeksie

Conditional downcast from CGFloat to CGFloat always succeeds

Próbowałem również z:

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

ale to również nie powiodło się:

Bound value in a conditional binding must be of Optional type 

Jakieś pomysły co jest nie tak?

Odpowiedz

8

cellHeights to tablica zawierająca nieobowiązkowe CGFloat. Zatem żaden z jego elementów nie może być zerowy, jako taki, jeśli indeks istnieje, elementem tego indeksu jest CGFloat.

Co próbujesz zrobić, to coś, co jest możliwe tylko wtedy, gdy tworzą tablicę optionals:

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

iw tym przypadku opcjonalny wiążące powinny być stosowane w sposób następujący:

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

Proponuję ponownie przeczytać o Optionals

Powiązane problemy