SwiftRanges provides some kinds of range that are not implemented in Swift Standard Library. It was originally written as a part of SwiftCGIResponder.
Ranges
Name
Lower Bound
Upper Bound
Implemented in
ClosedRange
Included
Included
Swift Standard Library
LeftOpenRange
Excluded
Included
This Library
OpenRange
Excluded
Excluded
This Library
Range
Included
Excluded
Swift Standard Library
PartialRangeFrom
Included
(Pos. Inf.)
Swift Standard Library
PartialRangeGreaterThan
Excluded
(Pos. Inf.)
This Library
PartialRangeThrough
(Neg. Inf.)
Included
Swift Standard Library
PartialRangeUpTo
(Neg. Inf.)
Excluded
Swift Standard Library
UnboundedRange
(Neg. Inf.)
(Pos. Inf.)
Swift Standard Library
Other structs implemented in this library
AnyRange: A type-erased range.
RangeDictionary: A collection like Dictionary whose key is a range.
MultipleRanges: A set that can contain multiple types of ranges.
Requirements
Swift 4.1, 4.2, 5(recommended)
macOS or Linux
Usage
Left-Open Ranges
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"
Type-erased Range: 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"
What is
SwiftRanges
?SwiftRanges
provides some kinds of range that are not implemented in Swift Standard Library.It was originally written as a part of SwiftCGIResponder.
Ranges
Other
struct
s implemented in this libraryAnyRange
: A type-erased range.RangeDictionary
: A collection likeDictionary
whose key is a range.MultipleRanges
: A set that can contain multiple types of ranges.Requirements
Usage
Left-Open Ranges
Type-erased Range:
AnyRange
RangeDictionary
MultipleRanges
Other methods like
Set
are also implemented inMultipleRanges
:intersection(_:)
union(_:)
symmetricDifference(_:)
License
MIT License.
See “LICENSE.txt” for more information.