- 개발 일자 : 2022. 1. 11
AlarmListVC 에서 섹션 분리
- 기존 알람 앱과 다르게 켜져 있는 알람과 꺼져있는 알람을 분리했다. 뭔가 켜져있는 것과 꺼져있는 것이 구분되어 있는 것이 보기 더 편하지 않을까 싶어서,,
- 그렇기 때문에 전체적으로 수정을 했는데, 헤더와 관련된 설정이 추가되었고, 그로 인해서 단순히 alarm 데이터를 받을 때, 단순히 인덱스 값을 받는 것이 더 번거롭다는 생각이 들어 indexPath 를 그대로 넘기기로 했다.
- AlarmManager 에서도 약간의 변화가 생겼는데
- alarms 변수를 이차원 배열로 만들었고 (켜진 알람과 꺼진 알람을 구분하기 위함)
- sectionCount 속성과 특정 섹션의 항목 개수를 반환하는 함수를 추가했다.
- 알람 설정과 관련된 함수들의 인자를 indexPath 를 받아 처리하도록 변경하였다.
var sectionCount: Int {
get {
return alarms.count
}
}
func count(of section: Int) -> Int {
return alarms[section].count
}
func getAlarm(at index: Int, in section: Int) -> Alarm {
return alarms[section][index]
}
func setAlarm(to alarm: Alarm, at indexPath: IndexPath) {
alarms[indexPath.section][indexPath.row] = alarm
}
func add(alarm: Alarm) {
alarms[0].append(alarm)
alarms[0].sort()
}
func delete(alarmRowAt indexPath: IndexPath) {
let alarm = alarms[indexPath.section].remove(at: indexPath.row)
}
func alarmSwitched(to isOn: Bool, alarmRowAt indexPath: IndexPath) {
let section = isOn ? 0 : 1
alarms[indexPath.section][indexPath.row].isOn = isOn
let alarm = alarms[indexPath.section].remove(at: indexPath.row)
alarms[section].append(alarm)
alarms[section].sort()
}
- 또한 AlarmDetailVC 에서도 단순히 인덱스 값(정수)을 저장했었는데 IndexPath 값을 갖고 있도록 수정하였다.
- 추가적으로 알람이 추가되었을 때, 각각의 섹션이 시간 순서대로 저장될 수 있도록 새 알람이 추가되는 경우나 알람을 켜거나 끄는 경우 정렬을 다시 해주었다. (이제와서 보니 알람 시간을 재 설정하는 경우도 추가해줘야겠다.)
- 알람 자체는 구조체이므로 정렬 시, 비교가 가능하도록 Comparable 을 채택하여 비교 함수를 정의해주었다.
struct Alarm: Comparable {
...
static func < (lhs: Alarm, rhs: Alarm) -> Bool {
return lhs.time < rhs.time
}
}
TO DO — 뒤늦게 보이는 버그들,, 😀 이래서 테스트 함수를 만들어야하는데!!
☑ 알람 재설정 시에도 정렬해줄 것
☑ 알람 비교 함수도 수정해야할 것 같음 : 알람에서 저장하는 시간 정보에 날짜도 포함되어있어서 먼저 생성한 알람 시간이 더 늦어도 앞에 정렬되어 있음;;
► 이전글 : Alarm 1. 기본 알람 목록 및 추가화면 구현, AlarmManager, 삭제 기능 추가
► 다음글 :
'# iOS | Swift > --- Project' 카테고리의 다른 글
iOS 지도 API 사용하기 (feat. Kakao Map) (0) | 2022.07.05 |
---|---|
[Alarm] #+5. 알람 레이블 화면 기능 완성 및 알람 목록 정렬 버그 수정 (0) | 2022.03.07 |
[Alarm] #+4. 알람 끄기 화면 구현 (0) | 2022.02.25 |
[Alarm] #+3. 알람 레이블 화면 추가 (0) | 2022.02.25 |
[Alarm] 1. 기본 알람 목록 및 추가화면 구현, AlarmManager, 삭제 기능 추가 (0) | 2022.02.25 |