- 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
'Ios > Swift UI' 카테고리의 다른 글
프로퍼티 초기화 중에 다른 인스턴스 멤버를 직접 참조할 수 없습니다. (0) | 2024.07.26 |
---|---|
부모뷰에서 자식뷰로 상태를 바인딩해서 전달할 때 : $ (0) | 2024.07.26 |
@State, @Binding, @ObservedObject (0) | 2024.07.26 |
@Environment (0) | 2024.07.26 |
Swift UI 메서드 정리 ( 계속 추가 ) (2) | 2024.07.24 |