Closed Range, Range (closed range operator, half-open range operator)
betterhee
2021. 2. 6. 13:23
ClosedRange 구조체
@frozen struct ClosedRange<Bound> where Bound : Comparable
ClosedRange 구조체의 타입 매개변수 Bound는 Comparable 프로토콜을 준수하는 타입이어야 한다는 타입 제약이 명시되어 있다.
(+ Comparable 프로토콜을 준수하면 <, <=, >=, > 연산자로 비교가 가능함)
static func ... (minimum: Self, maximum: Self) -> ClosedRange<Self>
let throughFive = 0...5 // [0, 5]
ClosedRange 인스턴스는 closed range operator(닫힌 범위 연산자) ...
로 만들 수 있다.
전제조건 minimum <= maximum
를 만족해야 한다.
throughFive.contains(0) // true
throughFive.contains(3) // true
throughFive.contains(5) // true
throughFive.contains(10) // false
upper bound(상한)과 lower bound(하한)을 모두 포함한다.
let zeroInclusive = 0...0
zeroInclusive.contains(0) // true
zeroInclusive.isEmpty // false
상한을 포함하므로, 하한과 상한이 동일한 ClosedRange 인스턴스는 해당 값을 포함하게 된다.
따라서 Closed Range 인스턴스는 빈 범위를 나타낼 수 없다.
Range 구조체
@frozen struct Range<Bound> where Bound : Comparable
static func ..< (minimum: Self, maximum: Self) -> Range<Self>
let underFive = 0.0..<5.0 // [0.0, 5.0)
Range 인스턴스는 half-open range operator(반-개방 범위 연산자) ..<
로 만들 수 있다.
underFive.contains(3.14) // true
underFive.contains(6.28) // false
underFive.contains(0.0) // true
underFive.contains(5.0) // false
위와 같이 어떠한 값이 해당 범위에 포함하는지 확인할 수 있다.
// Range
let empty = 0.0..<0.0
empty.contains(0.0) // false
empty.isEmpty // true
// ClosedRange
let zeroInclusive = 0...0
zeroInclusive.contains(0) // true
zeroInclusive.isEmpty // false
또한 Closed Range와 다르게, 빈 범위를 나타낼 수 있다.