Если мы перейдем к исходному коду из Array
, мы найдем:
public func index(after i: Int) -> Int {
// NOTE: this is a manual specialization of index movement for a Strideable
// index that is required for Array performance. The optimizer is not
// capable of creating partial specializations yet.
// NOTE: Range checks are not performed here, because it is done later by
// the subscript function.
return i + 1
}
В этом случае мы можем переписать код, подобный этому, и, наконец, получить сбой:
let a = [1]
let index = a.index(after: a.endIndex)
print(a[index])
Итак, все работает "как положено" для типа Array
, но мы должны проверить результат index
самостоятельно, если мы не хотим, чтобы произошел сбойво время выполнения
PS Полезная ссылка @ MartinR : https://forums.swift.org/t/behaviour-of-collection-index-limitedby/19083/3