# iOS | Swift/--- Project

[Alarm] 2. 알람 섹션 분리 및 정렬

jiniz.ll 2022. 3. 2. 14:58
  • 개발 일자 : 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, 삭제 기능 추가

► 다음글 :