swift 如何检查Array是否包含ClosedRange?

pepwfjgg  于 5个月前  发布在  Swift
关注(0)|答案(2)|浏览(55)

在我用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。我想阻止它。

2exbekwf

2exbekwf1#

你可以检查是否有效数组索引的范围“钳位”到给定的封闭范围等于该范围:

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

lfapxunr

lfapxunr2#

检查ClosedRange<Int>Range<Int>
请记住,Range不包括upperBound

private extension Array {
    func contains(range: ClosedRange<Int>) -> Bool {
        indices.contains(range.lowerBound) && indices.contains(range.upperBound)
    }
}

个字符

相关问题