Skip to content

ronick-grammer/GenderList

Repository files navigation

GenderList

simulator

구현사항

  1. 현업에서 해왔던 기술들 기반으로 작업하였습니다
  2. open source 사용에 제한을 두지 않았습니다
  3. 남자/여자 탭을 구현하여 남자탭에는 남자리스트만, 여자탬에는 여자 리스트만 노출되도록 하였습니다.
    • 남자/여자 탭은 예시일 뿐 탭 구성은 자유롭게(유동성있게) 만들었습니다.
  4. 좌우 스와이프 기능을 구현하였습니다.
  5. 탭 선택시 해당 리스트로 이동이 되도록 하였습니다.
  6. 스크롤뷰를 당겨서 놓을 경우 새로고침이 되는 Pull to refresh 기능을 구현하였습니다.
  7. 스크롤링시 자동으로 다음 리스트를 가져 올 수 있도록 하였습니다.(무한 스크롤링)
  8. 에러 예외처리를 하였습니다.
  9. 리스트중 하나 혹은 여러개를 선택하여 삭제할 수 있도록 하였습니다.
  10. 사진 선택시 사진을 자세히 볼 수 있는 화면으로 이동해야 합니다.
    • 사진은 2배까지 볼 수 있도록 확대 / 축소 기능이 있어야 합니다.
  11. 리스트 구현시 1단형/2단형 (1열, 2열) 구성으로 전환할 수 있는 형태로 구현하였습니다.
    • 1/2단 변경 버튼 클릭시 모든 탭의 화면에 영향을 주도록 하였습니다.
  12. UI 구성에는 제한을 두지 않았습니다.

아키텍처 패턴: Clean Architecture

디자인 패턴: MVVM, Input/Output

라이브러리: SnapKit, RxSwift, RxCocoa, Alamofire(HTTP통신), Kingfisher(이미지캐싱)

레이어 구조

├── Application
│   ├── AppDelegate.swift
│   ├── AppFlowCoordinator.swift
│   ├── DIContainer
│   │   ├── AppDIContainer.swift
│   │   ├── GenderListDetailDIContainer.swift
│   │   └── GenderListSceneDIContainer.swift
│   └── SceneDelegate.swift
├── Data
│   ├── Network
│   │   ├── GenderListQuery.swift
│   │   └── GenderListResponseDTO+Mapping.swift
│   └── Repositories
│       └── DefaultGenderListRepository.swift
├── Domain
│   ├── Entities
│   │   └── GenderProfile.swift
│   ├── Interfaces
│   │   └── Repositories
│   │       └── GenderListRepository.swift
│   └── Usecases
│       └── GenderListUsecase.swift
├── Infrastructure
│   └── Network
│       └── NetworkService.swift
└── Presentation
    ├── ListScene
    │   ├── Flow
    │   │   ├── GenderListDetailFlowCoordinator.swift
    │   │   └── GenderListFlowCoordinator.swift
    │   ├── ViewModels
    │   │   ├── GenderProfileItemViewModel.swift
    │   │   ├── InitialViewModel.swift
    │   │   ├── ListPageViewModel.swift
    │   │   ├── ListViewModel.swift
    │   │   ├── OutputHelpers
    │   │   │   └── ListViewOutputHelper.swift
    │   │   ├── TabListViewModel.swift
    │   │   └── TabViewModel.swift
    │   └── Views
    │       ├── Detail
    │       │   ├── DetailView.swift
    │       │   └── DetailViewController.swift
    │       ├── GenderListViewController.swift
    │       ├── List
    │       │   ├── ListCollectionView.swift
    │       │   ├── ListCollectionViewCell.swift
    │       │   ├── PageCollectionView.swift
    │       │   ├── PageCollectionViewCell.swift
    │       │   └── TabPageView.swift
    │       └── Tab
    │           ├── TabCollectionView.swift
    │           └── TabCollectionViewCell.swift
    ├── Protocols
    │   ├── Bindable.swift
    │   ├── OutputProtocols
    │   │   └── ListViewOutput.swift
    │   ├── PagenationGenerator.swift
    │   └── ViewModelType.swift
    └── Utils
        ├── ColumnStyle.swift
        ├── DefaultPagenationGenerator.swift
        ├── Extensions
        │   ├── ListPageView+Rx.swift
        │   ├── TabView+Rx.swift
        │   ├── UICollectionView+Extension.swift
        │   ├── UICollectionView+Rx.swift
        │   └── UIView+Extension.swift
        ├── FetchStatus.swift
        └── GenderListFetchHelper.swift

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published