Как предотвратить ошибку "Индекс массива вне диапазона"?

Есть ли способ, похожий на использование if let и/или optionals, чтобы проверить, собираетесь ли вы индексировать пустой буфер в Swift?

Ответ 1

Определите свой собственный:

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

Функция ref() возвращает необязательный параметр, поэтому он может быть nil, и вы можете использовать синтаксис if let для доступа к возвращаемому значению из ref(), когда он существует. Вы использовали бы это как таковое:

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
}