[swift] FSCalendar의 이벤트 표시 기능

FSCalendar은 iOS 애플리케이션에서 캘린더 기능을 제공하는 라이브러리입니다. 이 라이브러리를 사용하여 캘린더에 이벤트를 표시하는 기능을 구현할 수 있습니다.

FSCalendar에 이벤트를 표시하기 위해서는 먼저 해당 날짜에 이벤트가 있는지 여부를 저장하는 데이터 구조를 정의해야 합니다. 이 데이터 구조는 일반적으로 배열이나 딕셔너리 형태로 관리됩니다. 각 날짜를 키로 하여 이벤트 정보를 저장하고 나중에 이를 기반으로 캘린더에 표시합니다.

var eventsByDate: [String: [Event]] = [:]

위의 코드는 [String: [Event]] 형식의 변수 eventsByDate를 선언한 것입니다. 여기서 String은 날짜를 말하며, Event는 이벤트 정보를 담고 있는 사용자 정의 구조체나 클래스입니다. eventsByDate 변수는 날짜를 키로 하여 해당 날짜에 등록된 이벤트들을 배열로 저장합니다.

이제 FSCalendar에 이벤트를 표시하는 로직을 구현해보겠습니다. 우선 FSCalendarDelegate의 calendar:appearance:eventColorFor:at: 메서드를 구현하여 각 날짜에 맞는 이벤트 색상을 반환하도록 해야 합니다.

extension ViewController: FSCalendarDelegate {

    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventColorFor date: Date) -> UIColor? {
        let dateString = date.toString(format: "yyyy-MM-dd")
        if let events = eventsByDate[dateString], !events.isEmpty {
            return .red
        }
        return nil
    }
}

위의 코드에서 calendar:appearance:eventColorFor:at: 메서드는 특정 날짜에 맞는 이벤트 색상을 반환하는 메서드입니다. eventColorFor 파라미터로 전달된 날짜를 기반으로 eventsByDate에서 해당 날짜의 이벤트 배열을 찾고, 이벤트 배열이 비어있지 않으면 빨간색을 반환합니다.

마지막으로, FSCalendarDataSource의 calendar:numberOfEventsFor: 메서드를 구현하여 각 날짜에 표시할 이벤트의 개수를 반환해야 합니다.

extension ViewController: FSCalendarDataSource {

    func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
        let dateString = date.toString(format: "yyyy-MM-dd")
        if let events = eventsByDate[dateString] {
            return events.count
        }
        return 0
    }
}

위의 코드에서 calendar:numberOfEventsFor: 메서드는 특정 날짜에 표시할 이벤트의 개수를 반환하는 메서드입니다. numberOfEventsFor 파라미터로 전달된 날짜를 기반으로 eventsByDate에서 해당 날짜의 이벤트 배열을 찾고, 이벤트 배열의 개수를 반환합니다.

위의 코드를 적용하면 FSCalendar에 저장된 이벤트에 따라 캘린더에 이벤트가 표시됩니다. 이렇게 FSCalendar의 이벤트 표시 기능을 사용하여 사용자가 쉽게 이벤트를 확인할 수 있도록 할 수 있습니다.


참고 자료