본문 바로가기
Ios/Swift UI

CloseRange

by 잘먹는 개발자 에단 2024. 7. 26.

- ClosedRange는 가장 기본적인 범위 타입이다. 

- 원래는 이 타입이름 ( CloseRange )를 그대로 쓰지 않고 범위 오퍼베이터 ( ..., ..< )를 사용해서 값을 생성한다.

 

* 1 ... 10 : 1이상 10이하

* 1.. < 10 : 1이상 10미만

 

위의 표현식은 실제로 다음과 같은 ClosedRange 라는 타입으로 생성된다.

 

* ( 1...10 ).lowerBound // 1

* ( 1...10 ).upperBound // 10

* ( 1...10).count // 10

* (1...10).isEmpty // false

 

예를 들어서 다음과 같이

var testRange : ClosedRange = 1...10


// 이렇게 범위 비교를 할 수도
(1...10).contains(8) // true
1...10 ~= 8 // true
// 위 두 코드는 같은 로직을 수행한다.

 

라면 testRange는 배열일까? 아니다! 

그냥 말 그대로 범위를 나타낸다. 자료형도 딹 ClosedRange라고 박혀 있다. 

 

근데 이터레이션은 할 수 있다고 한다.. ㅋㅋ..

(1...10).forEach {
	value in 
    	print(value)
}

for value in 1...10{
	print(value)
}

 

이터레이션이 가능한 것은 이 범위 타입이 갯수를 셀 수 있는 타입이라서 그러하다. 

 1...10 이 ClosedRange<Int>는 1.2.3.4..... 10개!

 

 

그럼 ClosedRange<Double>은 어떨까?

이 경우에는 셀 수도 없고, .count, forEach 같은 이터레이션도 사용할 수가 없다. 

생성은 

1.0 ... 10.0

이런식으로 한다. 

 

 

 

 

날짜의 경우에는 어떨까?

날짜 범위를 사용하려면 Date 타입과 Calendar를 사용한다.

다음 예제를 한번 보자.

let today = Date()
let oneWeekFromNow = Calendar.current.date( byAdding : .day, value : 7, to : today)!
// !를 사용하는 이유는 옵셔널 값이기 때문이다.
let dateRange : ClosedRange<Date> = today...oneWeekFromNow

print(dateRange)

 

 

 

* 출처를 밝힙니다. 다음 글을 참고하였습니다. 

https://seorenn.blogspot.com/2018/05/swift-range.html

 

Range, 범위에 대한 이야기 | Swift

iOS 및 macOS 용 앱 개발, Emacs, Vim, Python 위주로 다루는 Seorenn 개인 블로그

seorenn.blogspot.com