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

Rom*_*mov 3 arrays range swift

在我用 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) }
Run Code Online (Sandbox Code Playgroud)

正如您可以猜到的,当我运行此代码时,我收到以下错误:Fatal error: Array index is out of range。我想阻止它。

Mar*_*n R 6

您可以检查有效数组索引 \xe2\x80\x9cclamped\xe2\x80\x9d 到\n给定闭合范围的范围是否等于该范围:

\n\n
let array = [1, 2, 3, 4, 5, 6, 7, 8]\nlet closedRange = 4...20\nif array.indices.clamped(to: Range(closedRange)) == Range(closedRange) {\n    let subArray = array[closedRange]\n    print(subArray)\n} else {\n    print("closedRange contains invalid indices")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,等效地:

\n\n
if array.indices.contains(closedRange.lowerBound)\n    && array.indices.contains(closedRange.upperBound) {\n    // ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n