티스토리 뷰
Calendar 구조체로 달력 구현하기를 시작하며..
iOS는 달력 구현이 힘들다는 말을 많이 들어왔습니다.
달력이 필요하면 직접 구현할 생각보단 라이브러리부터 찾았었죠!
친한 선배의 추천으로 달력을 직접 구현해 보니 생각보다 힘들지 않더라고요.
구현한 내용을 확실하게 정리하고자 Calendar 구조체로 달력 구현하기를 블로그에 남기려고 합니다!
Calendar 구조체란?
먼저 달력 구현에 필요한 Calendar
구조체에 대하여 알아보겠습니다.
Calendar
는 연도의 시작, 길이 및 구분이 정의되는 계산 시스템에 대한 정보를 요약하는 구조체입니다.
달력에 대한 정보를 제공하고 주어진 달력 단위의 범위를 결정하고 주어진 절대 시간에 단위를 추가하는 것과 같은 달력 계산에 대한 지원을 제공합니다.
정리하면 날짜를 계산하고 비교해주는 기능을 가진 구조체입니다.
Calendar의 메서드
다음은 달력 구현에 필요한 Calendar
의 메서드에 대하여 알아보겠습니다.
현재 달력 가져오기
static var current: Calendar
사용자의 현재 달력을 가져옵니다.
한번 사용해보니 그래고리력으로 잘 나오네요!
모든 날짜 구성 요소 반환
func dateComponents(Set<Calendar.Component>, from: Date) -> DateComponents
달력 표준 시간대를 사용하여 Calendar
의 모든 날짜 구성 요소를 반환합니다.
즉, [.year, .month, .day]
를 넣어주면 해당 날짜의 년, 월, 일을 반환합니다.
또한, 해당 날짜에 윤달이 포함되어 있는지 여부를 같이 반환합니다.
달력을 표시해주기 위해선 이 메서드를 이용하여 현재 날짜에서 년, 월만 뽑아냅니다.
날짜 생성
func date(from: DateComponents) -> Date?
지정된 구성 요소에서 생성된 날짜를 반환합니다.
이 메서드는 위에서 생성한 년, 월만 뽑아낸 DateComponents
를 Date
타입으로 변환하기 위하여 사용합니다.
아무것도 넣지 않으면 1년 1월 1일, .year
만 넣으면 2021년 1월 1일 이런 식으로 구성 요소를 제외한 나머지를 초기화시켜 생성된 날짜를 반환합니다.
구성 요소에 대한 값 반환
func component(Calendar.Component, from: Date) -> Int
날짜의 한 구성 요소에 대한 값을 반환합니다.
이 메서드는 특정 달의 첫 번째 날이 해당하는 요일을 알아내기 위하여 사용합니다.
해당하는 요일부터 1, 2, 3... 숫자를 채워주기 위해서죠!
.year
를 넣어주면 from
에서 year만 뽑아 Int
타입으로 출력해줍니다..weekday
를 넣어주면 from
에서 현재 요일을 1은 일요일, 7은 토요일로 출력해줍니다.
2021년 12월 11일 7(토요일)로 잘 출력이 되는 것을 볼 수 있습니다!
절대 시간의 값의 범위 반환
func range(of: Calendar.Component, in: Calendar.Component, for: Date) -> Range?
지정된 절대 시간을 포함하는 큰 달력 구성 요소(예: 월)에서 작은 구성요소(예: 일)가 취할 수 있는 절대 시간 값의 범위를 반환합니다.
쉽게 말하면 for
날짜가 속한 in
달에서 of
일이 취할 수 있는 범위를 계산합니다.
of
가 .day
, in
이 .month
, for
가 2021.12.11일 때,
2021.12.11이 속한 12월에 속할 수 있는 일의 범위를 계산해 주는 메서드입니다.
그래서 반환 값은 1..<32
가 됩니다. 12월에 1일부터 31일까지 속할 수 있다는 것이죠.
만약 of
에 .minute
, in
에 .day
를 입력하면 어떻게 될까요?
하루는 24시간 * 60분이니까 0..<1440... 이 아니라, 절대 시간을 반환하기 때문에 0..<60
이 결과로 출력됩니다.
이 메서드는 특정 달의 날짜가 며칠까지 있냐를 계산하기 좋겠네요!
날짜 계산
func date(byAdding: DateComponents, to: Date, wrappingComponents: Bool) -> Date?
지정된 날짜에 구성 요소를 추가하여 계산된 날짜를 반환합니다.
이전 달, 다음 달을 보여주기 위하여 사용합니다.
2021년 12월 11일에 month +1, day -1을 주니 2022년 1월 10일이 된 것을 볼 수 있습니다.
달력 구현에 필요한 Calendar
구조체에 대하여 알아봤습니다.
다음엔 이 구조체를 이용하여 달력을 구현하는 과정을 보여드리겠습니다! :)
'iOS' 카테고리의 다른 글
[iOS] Calendar 구조체로 달력 구현하기 (3) - 메서드 구현하기 (2) | 2022.01.04 |
---|---|
[iOS] Calendar 구조체로 달력 구현하기 (2) - 달력 뷰 구성하기 (0) | 2022.01.03 |
[iOS] Storyboard 없이 ViewController 연결하기 (0) | 2021.07.09 |
[iOS] UIViewController Life Cycle (1) | 2021.07.08 |
[iOS] Error (0) | 2021.05.31 |
- Total
- Today
- Yesterday
- java
- 유클리드 호제법
- ternary
- 최대공약수
- 다리를 지나는 트럭
- calendar
- abs()
- 에로토스테네스의 체
- iTunes Search API
- IOS
- compactMap
- Firebase
- TIL
- mysql
- SWIFT
- 최소공배수
- Git
- BOJ
- map
- programmers
- 프로그래머스
- Baekjoon
- sql
- 깊이 우선 탐색
- 달력
- UISearchController
- 별졈
- Algorithm
- DFS
- Kakao
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |