Как проверить, что массив содержит ClosedRange? - PullRequest
0 голосов
/ 08 ноября 2018

В моем приложении, написанном на Swift 4.2, у меня есть следующий код:

let arrayOfIntegers = [2, 1, 9, 5, 4, 6, 8, 7]
let unknownLowerBound = 4
let unknownUpperBound = 20
let closedRange = ClosedRange<Int>(uncheckedBounds: (lower: unknownLowerBound,
                                                     upper: unknownUpperBound))
let subRange = arrayOfIntegers[closedRange]
subRange.forEach { print($0) }

Как вы можете догадаться, когда я запускаю этот код, я получаю следующую ошибку: Fatal error: Array index is out of range. Я хочу предотвратить это.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете проверить, ограничен ли диапазон допустимых индексов массива данный закрытый диапазон равен этому диапазону:

let array = [1, 2, 3, 4, 5, 6, 7, 8]
let closedRange = 4...20
if array.indices.clamped(to: Range(closedRange)) == Range(closedRange) {
    let subArray = array[closedRange]
    print(subArray)
} else {
    print("closedRange contains invalid indices")
}

Или, что эквивалентно:

if array.indices.contains(closedRange.lowerBound)
    && array.indices.contains(closedRange.upperBound) {
    // ...
}
...