Se ho un array in Swift e provo ad accedere a un indice fuori limite, c'è un errore di runtime non sorprendente:
var str = ["Apple", "Banana", "Coconut"]
str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
Tuttavia, avrei pensato con tutto il concatenamento e la sicurezza opzionali offerti da Swift, sarebbe banale fare qualcosa del tipo:
let theIndex = 3
if let nonexistent = str[theIndex] { // Bounds check + Lookup
print(nonexistent)
...do other things with nonexistent...
}
Invece di:
let theIndex = 3
if (theIndex < str.count) { // Bounds check
let nonexistent = str[theIndex] // Lookup
print(nonexistent)
...do other things with nonexistent...
}
Ma non è così: devo usare la vecchia if
dichiarazione per verificare e assicurarsi che l'indice sia inferiore a str.count
.
Ho provato ad aggiungere la mia subscript()
implementazione, ma non sono sicuro di come passare la chiamata all'implementazione originale o di accedere agli elementi (in base all'indice) senza utilizzare la notazione dei pedici:
extension Array {
subscript(var index: Int) -> AnyObject? {
if index >= self.count {
NSLog("Womp!")
return nil
}
return ... // What?
}
}