2015-03-17 25 views
12

C'è un modo, simile all'utilizzo di if let e/o facoltativi, per verificare se si sta indicizzando un buffer vuoto in Swift?Come prevenire un errore di 'indice di matrice fuori intervallo'?

+0

Definire "buffer"? –

+0

Non so cosa significhi. Questo è un errore che ottengo quando provo ad accedere a un indice di array che non esiste ancora; troppo alto. L'array potrebbe avere 10 elementi, ma l'app tenta di accedere all'undicesimo. – webmagnets

+0

Quindi è un array, controlla i limiti di un array usando la proprietà count ('array.count') GoZoner fornisce un esempio nella sua risposta. –

risposta

14

definire il proprio:

extension Array { 
    func ref (i:Int) -> T? { 
    return 0 <= i && i < count ? self[i] : nil 
    } 
} 

La funzione ref() restituisce un optional, in modo che possa essere nil, ed è possibile utilizzare la sintassi if let per accedere al valore restituito da ref() quando esiste. Lo utilizzeresti come tale:

var myA = [10,20,30] 
if let val = myA.ref(index) { 
    // Use 'val' if index is < 3 
} 
else { 
    // Do this if the index is too high 
} 
+1

Non lo capisco molto bene. Puoi mostrarmi come usarlo e forse cosa sta facendo? – webmagnets

+0

Grazie mille. – webmagnets

+0

Penso che ref abbia bisogno di un nome migliore. Ma non potrei pensarne uno. – osrl

Problemi correlati