Swift Calendar 알고리즘 구현하기
✅ 이번에는 해당하는 년도와 달을 주면 첫 날의 요일과 마지막 날과 마지막 날의 요일을 찾는 알고리즘을 구해보자.
✅ 코드
func calendarCellCount(year: Int, month: Int) {
let date = Date(timeIntervalSinceNow: 0)
var calendar = Calendar.current
calendar.locale = Locale(identifier: "ko_kr")
// 여기에 기입하지 않은 날짜는 1로 초기화가 된다
let components = calendar.dateComponents([.year, .month], from: date)
let myDateComponents = DateComponents(year: year, month: month)
// day를 기입하지 않아서 현재 달의 첫번쨰 날짜가 나오게 된다
let startOfMonth = calendar.date(from: myDateComponents)
let comp1 = calendar.dateComponents([.day,.weekday,.weekOfMonth], from: startOfMonth!)
// 이번 달의 마지막 날짜를 구해주기 위해서 다음달을 구한다 이것도 day를 넣어주지 않았기 때문에 1이 다음달의 1일이 나오게 된다
let nextMonth = calendar.date(byAdding: .month, value: +1, to: startOfMonth!)
// 위에 값에서 day값을 넣어주지 않았기 떄문에 1이 나오게 되므로 마지막 날을 알기 위해서 -1을 해준다
let endOfMonth = calendar.date(byAdding: .day, value: -1, to: nextMonth!)
let comp2 = calendar.dateComponents([.day, .weekday, .weekOfMonth], from: endOfMonth!)
let weekArr = calendar.shortWeekdaySymbols
if let weekday = comp1.weekday, let weekday2 = comp2.weekday {
print(weekArr[weekday-1]) // 첫날의 요일
print(weekArr[weekday2-1]) // 마지막 날의 요일
}
//이 달의 첫번째 날과 끝날을 구했으니깐 그 사이의 날짜는 for문을 통해서 구하면 된다
//현재 만들어 놓은 달력의 label변수들을 배열에 저장하여서 for문을 돌면서 차례대로 값을 집어 넣으면 되는데
//label값에 entry값을 집어 넣는 위치는 첫번째 날짜의 weekday를 기준으로 하면 된다
for i in comp1.day!...comp2.day! {
print(i)
}
}
✅ 참고
https://peachberry0318.tistory.com/17
'Archive > 위젯 캘린더(project-ios)' 카테고리의 다른 글
[iOS] UIButton SystemImage 크기 조절 (0) | 2022.05.04 |
---|---|
[iOS] UITableView BackgroundView didTapped ✨ (0) | 2022.05.04 |
[iOS] collectionViewCell 사이에 공백없애기 (0) | 2022.05.02 |
[iOS15] Device width, height in safeAreaLayoutGuide (0) | 2022.05.02 |