728x90
0. 이전 -> 현재
- 카테고리만 필터링 -> 기간도 필터링
- 추가한 순서대로 표시 -> 원하는 순서로 정렬
- 단일 필터 -> 필터 조합(기간 + 카테고리)
1. 날짜 계산기 Calendar
- 오늘이 며칠인지 계산
- 이번 주의 시작/끝 계산
- 이번 달의 범위 계산
- 날짜 비교(과거/미래)
let cal = Calendar.current
let today = cal.startOfDay(
for: Date()
)
// 이번 주 시작
let weekStart = cal.dateInterval(
of: .weekOfYear,
for: today
)?. start
// 이번 달 시작
let monthStart = cal.dateInterval(
of: .month,
for: today
)?.start
- startOfDay: 시간을 00:00:00으로 맞춤 (날짜만 비교)
- dateInterval: 주/월의 시작과 끝을 자동 계산
- 한국은 주 시작이 일요일 (바꿀 수 있음)
2. 기간별 필터링

enum TimePeriod {
case all, today, week, month
}
var filtered: [Event] {
switch selectedPeriod {
case .all: return events
case .today:
return events.filter {
cal.isDateInToday($0.date)
}
case .week:
return events.filter {
$0.date >= weekStart &&
$0.date < weekEnd
}
}
case .month:
// 이번 달 범위 내
}
카테고리 + 기간 = AND 조건이 된다!
// "이번 주 업무 일정만 표시"
events
.filter { 카테고리 == .work } // 1차 : 업무 카테고리만
.filter { 날짜가 이번주 } // 2차 : 이번 주만
3. 원하는 순서로 정렬 .sorted
- 오름차순
- A -> Z, 과거 -> 미래, 1 -> 9
- 내림차순
- Z -> A, 미래 -> 과거, 9 -> 1
- 원본은 바뀌지 않음!!!
// 날짜순 (오름차순)
events.sorted {
$0.date < $1.date
}
// 날짜순 (내림차순)
events.sorted {
$0.date > $1.date
}
// 제목순 (가나다순)
events.sorted {
$0.title < $1.title
}
- 4. 필터 체이닝, 연속 적용 !
- 두 조건을 "모두" 만족하는 일정만 표시
- filter를 연속으로 걸면 AND 조건

var result: [Event] {
var list = events
//1. 카테고리 필터
if let cat = selectedCategory {
list = list.filter {
$0.category == cat
}
}
//2. 기간 필터
list = applyPeriodFilter(list)
//3. 정렬
list = list.sorted {
$0.date < $1.date
}
return list
}

4. 실행 체크
- [ㅇ] 다양한 날짜의 테스트 일정을 만들었다
- [ㅇ] 모든 기간 필터를 테스트했다
- [ㅇ] 날짜순, 제목순 정렬을 테스트했다
- [ㅇ] 기간 + 카테고리 조합을 테스트했다
반응형
'AI 해보기 > 딸깍! 일정관리 앱 만들어보기' 카테고리의 다른 글
| 9. 탭 뷰 만들기 (0) | 2026.03.20 |
|---|---|
| 8. 검색과 그룹별 (0) | 2026.03.20 |
| 6. 필터 추가해보기 (카테고리 필터링) (1) | 2026.03.20 |
| 5. 카테고리와 알림 (0) | 2026.03.20 |
| 4. 삭제와 수정 추가 (CRUD 완성해보기) (0) | 2026.03.20 |
댓글