SwiftRanges
提供了一些 Swift 标准库中未实现的范围类型。
它最初是作为 SwiftCGIResponder 的一部分编写的。
名称 | 下界 | 上界 | 实现于 |
---|---|---|---|
ClosedRange | 包含 | 包含 | Swift 标准库 |
LeftOpenRange | 排除 | 包含 | 此库 |
OpenRange | 排除 | 排除 | 此库 |
Range | 包含 | 排除 | Swift 标准库 |
PartialRangeFrom | 包含 | (正无穷大) | Swift 标准库 |
PartialRangeGreaterThan | 排除 | (正无穷大) | 此库 |
PartialRangeThrough | (负无穷大) | 包含 | Swift 标准库 |
PartialRangeUpTo | (负无穷大) | 排除 | Swift 标准库 |
UnboundedRange | (负无穷大) | (正无穷大) | Swift 标准库 |
AnyRange
:类型擦除的范围。RangeDictionary
:一种类似于 Dictionary
的集合,其键是一个范围。MultipleRanges
:一个可以包含多种范围类型的集合。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"
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
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"
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
中实现
intersection(_:)
union(_:)
symmetricDifference(_:)
MIT 许可证。
有关更多信息,请参见 "LICENSE.txt"。