TIL 22

오늘 한 일 / 배운점

  • iOS 앱개발 입문 팀 프로젝트 과제
  • 8/16 9:00 팀 회의 / 코드리뷰
  • 8/16 15:00 팀 회의 / 코드리뷰

과제

  • iOS 앱개발 입문 팀 프로젝트 과제

느낀점

오늘 세그먼트 컨트롤 값에 따라서
종료된 / 진행 중인 프로젝트를 셀을 다르게 뿌려주는 코드를 짰는데

// ...(생략)

@objc private func segmentedControlValueChanged(_ sender: UISegmentedControl) {
      switch sender.selectedSegmentIndex {
      case 0:
          projectList = dummyProjectList.filter { $0.endDate < Date() }
      case 1:
          projectList = dummyProjectList.filter { $0.endDate >= Date() }
      default:
          break
      }
      if let sortOption = sortCells {
          switch sortOption {
          case .projectName:
              projectList.sort { $0.name < $1.name }
          case .startDate:
              projectList.sort { $0.startDate < $1.startDate }
          case .endDate:
              projectList.sort { $0.endDate > $1.endDate }
          }
      }
      tableView.reloadData()
  }
}
// ...(생략)

case 0: projectList = dummyProjectList.filter { $0.endDate < currentDate }
case 1: projectList = dummyProjectList.filter { $0.endDate >= currentDate }

이런 식으로 “종료된 프로젝트"를 누르면 프로젝트 종료일이 오늘 이전인 프로젝트를
“진행 중인 프로젝트"를 누르면 프로젝트 종료일이 오늘 or 오늘 이후인 것들을 표시하고 싶었다

근데 더미 데이터 중에 종료일이 오늘 당일과 같은 날인데도 자꾸 종료된 프로젝트에 들어가 있는 것이다.

알고 보니 Date()로 하게 되면 현재 날짜와 시간까지 가져오기 때문에 그게 또 문제가 있었던 것
만약 종료일(endDate)이 8/17이라 했을 때 현재 날짜와 시간을 기준으로 비교하면 시간까지 고려되기 때문에
종료일과 현재 시간을 비교하는 과정에서 종료일이 현재 시간보다 이전으로 인식될 수도 있다는 것..

그래서 결론은 뭐냐

// ...(생략)

@objc private func segmentedControlValueChanged(_ sender: UISegmentedControl) {
 let currentDate = Calendar.current.startOfDay(for: Date())
        switch sender.selectedSegmentIndex {
        case 0:
            projectList = dummyProjectList.filter { $0.endDate < currentDate }
        case 1:
            projectList = dummyProjectList.filter { $0.endDate >= currentDate }
        default:
            break
        }
        if let sortOption = sortCells {
            switch sortOption {
            case .projectName:
                projectList.sort { $0.name < $1.name }
            case .startDate:
                projectList.sort { $0.startDate < $1.startDate }
            case .endDate:
                projectList.sort { $0.endDate > $1.endDate }
            }
        }
        tableView.reloadData()
    }
}
// ...(생략)

이렇게 Calendar.current.startOfDay(for: Date())를 사용해서 시간을 없앤 다음에 비교하면 된다. 1

아~주 정확하게 내가 원하는 데로 잘 들어가 있다
역시 컴퓨터는 칼 같다… 조금만 생각해 보면 당연한 것을 괜한 곳에 시간 썼네
ㅜㅜ 앞으로 조심하자