什么是 SwiftRanges

SwiftRanges 提供了一些 Swift 标准库中未实现的范围类型。
它最初是作为 SwiftCGIResponder 的一部分编写的。

范围

名称 下界 上界 实现于
ClosedRange 包含 包含 Swift 标准库
LeftOpenRange 排除 包含 此库
OpenRange 排除 排除 此库
Range 包含 排除 Swift 标准库
PartialRangeFrom 包含 (正无穷大) Swift 标准库
PartialRangeGreaterThan 排除 (正无穷大) 此库
PartialRangeThrough (负无穷大) 包含 Swift 标准库
PartialRangeUpTo (负无穷大) 排除 Swift 标准库
UnboundedRange (负无穷大) (正无穷大) Swift 标准库

此库中实现的其他 struct

要求

用法

左开区间

import Ranges

let leftOpenRange: LeftOpenRange<Int> = 10<..20
print(leftOpenRange.contains(10)) // -> false
print(leftOpenRange.contains(15)) // -> true
print(leftOpenRange.contains(20)) // -> true

let openRange: OpenRange<Int> = 10<..<20
print(openRange.contains(10)) // -> false
print(openRange.contains(15)) // -> true
print(openRange.contains(20)) // -> false

let greaterThan: PartialRangeGreaterThan<Int> = 10<..
print(greaterThan.contains(10)) // -> false
print(greaterThan.contains(Int.max)) // -> true

print(greaterThan.overlaps(...11)) // -> true
print(greaterThan.overlaps(..<11)) // -> false
                                   // Because there is no integer in "10<..<11"

类型擦除范围:AnyRange

import Ranges
// Original operators are implemented for `AnyRange`.
// Some of them are below:

let leftOpenRange: LeftOpenRange<Int> = 10<..20
let typeErasedLeftOpenRange: AnyRange<Int> = 10<...20
print(leftOpenRange == typeErasedLeftOpenRange) // -> true

let openRange: OpenRange<Int> = 10<..<20
let typeErasedOpenRange: AnyRange<Int> = 19<...<30
print(openRange.overlaps(typeErasedOpenRange)) // -> false

let greaterThan: PartialRangeGreaterThan<Int> = 10<..
let typeErasedGreaterThan: AnyRange<Int> = 20<...
print(greaterThan.contains(15)) // -> true
print(typeErasedGreaterThan.contains(15)) // -> false

RangeDictionary

var dic: RangeDictionary<Int, String> = [
  1....2: "Index",
  3....10: "Chapter 01",
  11....40: "Chapter 02"
]

print(dic[1]) // Prints "Index"
print(dic[5]) // Prints "Chapter 01"
print(dic[15]) // Prints "Chapter 02"
print(dic[100]) // Prints "nil"

dic.insert("Prologue", forRange: 2....5)
print(dic[5]) // Prints "Prologue"

MultipleRanges

import Ranges

var multi = MultipleRanges<Int>()
multi.insert(10...20) 
multi.insert(30...40)
print(multi.contains(15)) // -> true
print(multi.contains(25)) // -> false
print(multi.contains(35)) // -> true

multi.subtract(15...35)
print(multi.ranges) // -> [10..<15, 35<..40]

其他类似于 Set 的方法也在 MultipleRanges 中实现

许可证

MIT 许可证。
有关更多信息,请参见 "LICENSE.txt"。