이커머스 스타일의 토이 프로젝트
- SwiftUI (iOS 15.0)
- MVVM 패턴 with Combine
- 프로토콜 지향 네트워크 레이어
async-await
적용한 비동기 메서드 & 유닛 테스트- PHPickerViewController (iOS 14.0+)
- 무한 스크롤
- SwiftLint (via Homebrew)
NewOpenMarket
├── Source
│ ├── App
│ ├── Network
│ │ └── API
│ ├── Presentation
│ │ ├── MainView
│ │ ├── ItemsListView
│ │ ├── ItemDetailView
│ │ ├── ItemFormView
│ │ ├── SettingsView
│ │ └── Shared
│ ├── Model
│ ├── Utility
│ ├── Extension
│ └── Resource
└── UnitTests
무한 스크롤과 리프레시 | Image 컨트롤러 |
---|---|
![]() |
![]() |
버벅임 없이 무한 스크롤이 가능합니다. 리프레시 버튼은 1.5초의 대기시간을 걸었습니다. |
사진을 선택하거나 취소할 수 있습니다. 최대 개수에 도달하면 Alert 를 보여줍니다. |
키보드 애드온 | 상품 등록 |
---|---|
![]() |
![]() |
textField 사이를 이동할 수 있는 버튼을 키보드 위에 구현했습니다. 우측엔 키보드 dismiss 버튼을 뒀습니다. |
데이터를 검증한 뒤, 서버에 상품을 등록합니다. Alert 를 확인하면 ListView 로 돌아가서 자동으로 리프레시합니다. |
Page Style 이미지 뷰어 | 상품 수정 |
---|---|
![]() |
![]() |
정방형의 이미지들을 Page 처럼 넘길 수 있습니다. NavigationBar 에 달라붙은 Sticky Image 효과를 구현했습니다. |
상품 데이터를 변경 후, 서버에 수정을 요청합니다. DetailView 는 즉시 변경되며 ListView 로 돌아가면 자동으로 리프레시합니다. |
다크 모드 토글 | 상품 삭제 |
---|---|
![]() |
![]() |
설정의 다크 모드 토글을 통해 앱 전체에 다크 테마를 적용할 수 있습니다. 앱을 다시 실행해도 변경 상태가 저장됩니다. |
상품 삭제를 서버에 요청합니다. Alert 를 확인하면 ListView 로 돌아가서 자동으로 리프레시합니다. |