Se eu tiver uma matriz no Swift e tentar acessar um índice que está fora dos limites, há um erro de tempo de execução não surpreendente:
var str = ["Apple", "Banana", "Coconut"]
str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
No entanto, eu teria pensado que, com todo o encadeamento e segurança opcionais que o Swift traz, seria trivial fazer algo como:
let theIndex = 3
if let nonexistent = str[theIndex] { // Bounds check + Lookup
print(nonexistent)
...do other things with nonexistent...
}
Ao invés de:
let theIndex = 3
if (theIndex < str.count) { // Bounds check
let nonexistent = str[theIndex] // Lookup
print(nonexistent)
...do other things with nonexistent...
}
Mas esse não é o caso - eu tenho que usar a if
instrução ol ' para verificar e garantir que o índice seja menor que str.count
.
Tentei adicionar minha própria subscript()
implementação, mas não tenho certeza de como passar a chamada para a implementação original ou acessar os itens (com base em índice) sem usar a notação subscrita:
extension Array {
subscript(var index: Int) -> AnyObject? {
if index >= self.count {
NSLog("Womp!")
return nil
}
return ... // What?
}
}