Если у меня есть массив в Swift и пытаюсь получить доступ к индексу, который выходит за рамки, возникает неудивительная ошибка времени выполнения:
var str = ["Apple", "Banana", "Coconut"]
str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
Однако я бы подумал со всей возможной цепью и безопасностью, которую приносит Swift, было бы тривиально сделать что-то вроде:
let theIndex = 3
if let nonexistent = str[theIndex] { // Bounds check + Lookup
print(nonexistent)
...do other things with nonexistent...
}
Вместо:
let theIndex = 3
if (theIndex < str.count) { // Bounds check
let nonexistent = str[theIndex] // Lookup
print(nonexistent)
...do other things with nonexistent...
}
Но это не так - я должен использовать оператор ol 'if
для проверки и обеспечения индекса меньше str.count
.
Я попытался добавить свою собственную реализацию subscript()
, но я не уверен, как передать вызов исходной реализации или получить доступ к элементам (на основе индексов) без использования нотации индекса:
extension Array {
subscript(var index: Int) -> AnyObject? {
if index >= self.count {
NSLog("Womp!")
return nil
}
return ... // What?
}
}