[TIL / 25.02.14] 열거형 Enum을 이용한 메뉴 구성

2025. 2. 14. 18:12·iOS/Swift

1. 오늘 진행한 작업

아직 디자인이 나오지 않은 부분인데, 사이드메뉴에서 로그인이 되지 않은 게스트 상태일 때 어떻게 띄울지도 구현을 해야했다.

로그인이 되지 않았다면 기존 포스트에서 나오던 기능들의 대부분을 쓸 수 없기에 테이블 뷰 내 cellForRowAt 구성도 바꿔주어야 했는데, 이 로그인 여부는 프로젝트에서 jwt를 쓰고 있기에 액세스 토큰의 존재 여부로 확인하기로 했다. 


2. 겪었던 문제와 해결

 

로그인을 했을땐 메뉴가 네 개, 로그인을 하지 않았을땐 메뉴가 한 개인데 이를 어떻게 Delegate, DataSource 측에서 관리시켜주지? 가 가장 큰 문제였다.

이런 상태에 따라서 달라지는 테이블뷰는 처음 구현해보는데 그냥 메뉴의 이름으로 구분을 할 수는 없을까? 하다가 나온 결론이 enum 타입이었다. 사실 이 부분만 보면 그냥 String의 배열로 isLoggedIn에 따라 다르게 리턴해주면 되는데, 이에 대한 처리 메서드를 정의하는 부분에서 indexPath.row로 받기엔 어렵겠다 싶어 이렇게 결정했다.

enum MenuItem {
    case myBlog
    case drafts
    case settings
    case logout
    
    var title: String {
        switch self {
        case .myBlog: return "내 블로그"
        case .drafts: return "임시글"
        case .settings: return "설정"
        case .logout: return "로그아웃"
        }
    }
}

class SideMenuViewModel {
    
    var isLoggedIn: Bool {
        return KeychainHelper.shared.getAccessToken() != nil
    }
    
    var menuItems: [MenuItem] {
        if isLoggedIn {
            return [.myBlog, .drafts, .settings, .logout]
        } else {
            return [.settings]
        }
    }
}

 

 

 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        switch indexPath.section {
        case 0:
            guard let cell = tableView.dequeueReusableCell(withIdentifier: MenuStringCell.identifier, for: indexPath) as? MenuStringCell else {
                return UITableViewCell()
            }
            cell.configure(title: sideMenuViewModel.menuItems[indexPath.row].title)
            
            return cell
    }

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        switch indexPath.section {
        case 0:
            let selectedItem = sideMenuViewModel.menuItems[indexPath.row]
            delegate?.didSelectMenuItem(selectedItem)
        case 1:
            return
        default:
            return
        }
    }

 

일부 생략한 코드인데, 이렇게 enum에서 정의한 title 변수도 연계해서 설정해줄 수 있다. enum으로 골랐던 이유가 이 delegate.didSelectMenuItem(selectedItem)인데, 이렇게 하지 않으면 이에 대한 메서드를 설정하는 측에서 어느 메뉴를 골랐는지에 대한 매개체를 삼기 애매하다는 생각이었다.

extension HomeViewController: MenuViewDelegate {
    func didSelectMenuItem(_ menuItem: MenuItem) {
        handleMenuToggle()
        
        switch menuItem {
        case .myBlog:
            return
        case .drafts:
            return
        case .settings:
            return
        case .logout:
            print("로그아웃")
            UserDefaultsManager.shared.clearUserInfo()
            KeychainHelper.shared.clearTokens()
        default:
            return
        }
    }
    
    func didTapCloseButton() {
        sideMenuView.toggleMenu()
    }
}

 

요렇게 Delegate 쪽 완성 시키는 부분에서 case 별로 메서드를 지정시켜줄 수 있게 되었다. 

 


열거형은 네트워크 에러 정의할때도 주된 개념으로 쓰이는데, 생각 이상으로 쓸 데가 많으니 제대로 알아두는게 좋겠다.

이 외에도 로그인 여부를 체크한다던지, 헤더를 로그인 여부에 따라 다르게 로드한다던지에 대해도 구현했지만 이정도만 기록한다.

'iOS > Swift' 카테고리의 다른 글

[TIL / 25.02.21] SkeletonView 적용 및 생명주기 관련 문제 해결  (0) 2025.02.21
[TIL / 25.02.17] 뷰 맨 앞으로 보내기  (0) 2025.02.17
[TIL / 25.02.13] 다중 섹션 및 헤더가 포함된 사이드 메뉴 구현  (0) 2025.02.13
[TIL / 25.02.11] 사이드메뉴를 구현해보자 . . . !  (0) 2025.02.11
[TIL / 25.02.10] 헤더를 이용한 테이블뷰를 구성, 셀과 헤더 높이 자동 계산  (4) 2025.02.10
'iOS/Swift' 카테고리의 다른 글
  • [TIL / 25.02.21] SkeletonView 적용 및 생명주기 관련 문제 해결
  • [TIL / 25.02.17] 뷰 맨 앞으로 보내기
  • [TIL / 25.02.13] 다중 섹션 및 헤더가 포함된 사이드 메뉴 구현
  • [TIL / 25.02.11] 사이드메뉴를 구현해보자 . . . !
subkyu-ios
subkyu-ios
subkyu-ios 님의 블로그 입니다.
  • subkyu-ios
    subkyu-ios 님의 블로그
    subkyu-ios
  • 전체
    오늘
    어제
    • 분류 전체보기 (48) N
      • iOS (32) N
        • Swift (32) N
      • 내일배움캠프 (7)
      • Git, Github (3)
      • Algorithm (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    algorithm
    회고
    내일배움캠프
    stackview
    본캠프
    협업
    프로그래머스
    Wil
    트러블슈팅
    tabman
    github
    Swift
    til
    UIKit
    KPT
    최적화
    ios
    사전캠프
    TableView
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
subkyu-ios
[TIL / 25.02.14] 열거형 Enum을 이용한 메뉴 구성
상단으로

티스토리툴바