arrays - 如何检查数组是否包含 ClosedRange?

标签 arrays swift range

在我用 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 :数组索引超出范围。我想阻止它。

最佳答案

您可以检查有效数组索引的范围是否“限制”到 给定的闭合范围等于该范围:

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) {
    // ...
}

关于arrays - 如何检查数组是否包含 ClosedRange?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53206040/

相关文章:

ios - 将应用程序启动到运行时关闭的最后一个 View

ios - 如何在 Swift 3 中加载自定义包

python - 在 Python 中计算一定数量的值的范围

python - 在python中多次使用数组内部的 'range'

javascript - 在函数内为现有数组(全局变量)分配新值不起作用。为什么?

arrays - PowerShell 通过引用函数传递两个数组

arrays - Fortran 中的函数指针数组

arrays - 查找值在 PostgreSQL 数组中的位置

swift - 滚动时导航栏标题发生变化

VBA Excel : Assigning range values to a new range