Giter Site home page Giter Site logo

sidedish's Introduction

sidedish

그룹프로젝트 #2

sidedish's People

Contributors

godrm avatar

sidedish's Issues

네트워크 구현 방식 고민 중

문제 상황

  • combine 과 alamofire 두 개 다 써보는 방향으로 회의 때 합의를 했었음
  • 각각은 따로 이해가 되는데, 동시에 적용이 어려움 😅

고민 중

  1. combine
  2. alamofire
  3. combine & alamofire

@panther222128

중 하나 택하겠지만, 아직 각각의 장단점도 파악 못했습니다...
그래서 일단 상황 공유해드리고~
조금 더 파악 후에, edit 해서 장단점 및 의견 공유해볼게용!

장단점

의견 제시

Toast 구현 테스트

아래 gif에서 보이는 것처럼 Toast 구현 성공
TableView의 Header와 ViewController의 View에서도 출력하도록 함

ezgif com-rotate-3

CustomTableViewHeaderFooterView라는 UITableViewHeaderFooterView를 서브클래싱한 객체에서 아래 함수를 추가

// GestureRecognizer를 추가, target이 self이므로 Header가 Gesture를 인식함
private func configureToast() {
    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(headerTap))
    self.addGestureRecognizer(tapRecognizer)
}

// Tap이 발생하면 Header(self, 즉 자신이 toast를 만들기 때문)가 "토스트 생성" String을 출력함
// 동시에 입력받았다는 신호를 Notification을 통해 ViewController에게 전달
@objc func headerTap() {
    self.makeToast("토스트 생성")
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ToastButton"), object: nil)
}
// Notification Observer 추가
private func tableViewHeaderObserber() {
    NotificationCenter.default.addObserver(self, selector: #selector(toast), name: NSNotification.Name(rawValue: "ToastButton"), object: nil)
}

// ViewController가 가지고 있는 ViewModel 내 데이터의 개수를 출력함
@objc func toast() {
    self.view.makeToast("\(ohMyGirl.ohMyGirl.count)")
}

반영 필요

팀 내 프로젝트 협의 사항

[2021.04.19]

1. git 브랜치 생성

저장소는 Cri의 저장소에 두고 develop 브랜치 생성 후 하위 브랜치를 생성해 작업하기로 함

2. 프로젝트 생성 전 Persistence 방법 결정

realm을 학습하고 활용하기로 함

3. 프로젝트 생성 및 View 작성 방법 결정

  1. 가능한 이해하고 있는 선에서 MVVM 패턴 적용을 시도하기로 함
  2. 프로젝트 생성 후 두 가지 화면 단위 아래로 MVVM 그룹을 생성해두었음.

4. View 구현 방식 결정

DiffableDataSource를 학습하고 스토리보드 사용 혹은 스토리보드와 XIB 사용 사이에서 적합한 방식을 선택하기로 함

5. 프로젝트 내 기타 협의 사항

  1. 여유가 된다면 XCTest를 진행(혹은 작업 단위별로 나눠서 할 수 있다면 하는 방향)
  2. Combine을 학습하고 활용해보기로 함

View 구현 방식 결정

DiffableDataSource 활용 관련

첫 번째 View, 즉 Main 화면에서 View의 구현 시 스토리보드를 활용, 코드를 통해 구현, XIB를 활용할지 결정 필요

스토리보드와 XIB 활용으로 결정

Main과 상품 상세 두 가지 중 한 가지씩 맡기로 결정, Lia가 Main을 맡고 Cri가 상품 상세

CollectionView에서 XIB로 DiffableDataSource를 구현하는 것에 대한 이슈

XIB를 활용해 XIB에 View 요소를 추가하고 View 요소에 필요한 값을 주입할 때 'unexpectedtly found nil' 에러가 발생함

찾아본 결과 XIB의 Layout을 결정하지 못해 컴파일 시 XIB가 존재하는지 아닌지 여부에 대해 존재하지 않는다는 판단으로 XIB의 View 요소는 존재하지 않음

달리 표현하면 Collection View에서 Cell의 개수는 정확하게 표현하고 있지만 Cell 내의 View 요소를 표현하지 못함

즉 Cell 내의 View 요소의 Layout이 결정되지 않아 컴파일에서 nil 상태로 반환하는 것으로 보임

프로젝트의 빠른 진행을 위하려면 Programmatically 혹은 only Storyboard 활용이 필요하다고 보임

그 이유는 DiffableDataSource에서 XIB를 활용하는 것이 까다롭고 예시마저 검색 시 드물게 보임

참고 링크
https://zeddios.tistory.com/1197
https://stackoverflow.com/questions/55640408/xibs-iboutlets-returning-nil-when-using-xib-in-storyboard
https://stackoverflow.com/questions/52066101/cannot-create-a-custom-view-using-xib-file-due-to-nil-subviews

느낀점: 아래 링크처럼 XIB를 간략하게 사용해볼 수 있겠지만 Layout 설정 등 까다로운 작업이 요구되므로 깊이있는 이해가 필요함

https://velog.io/@panther222128/UICollectionView-with-XIB-Practice

해결: 스토리보드 내 CollectionView에서 Cell의 사이즈를 Custom으로 설정

상품 상세 정보 화면 구현

상품 상세 화면 구현 관련

CollectionView의 DiffableDataSource를 이용해 구현하던 중이었으나 애플이 제공하는 Sample Code 및 기타 자료를 통해 DiffableDataSource의 이점은 Section의 구분에서 각각 다른 View를 포함할 때 의미가 있다고 이해했음 -> ScrollView로 전환

아래 두 영상을 중심으로 ScrollView 학습 및 구현

https://www.youtube.com/watch?v=MXJffcoWRlw&t=537s
https://www.youtube.com/watch?v=X2Wr4TtMG6Q&t=648s

ViewController에 ScrollView를 채우고 ScrollView 내부에 1) 상품 이미지를 나타내는 ScrollView, 2) 상품 상세, 배송정보, 주문 수량, 주문정보의 View를 담는 네 개의 ContainerView, 3) 상품 상세 설명 이미지를 나타내는 UIImageView를 갖는 Hierarchy

가장 하위의 ContainerView 네 개는 그 안에 세부 View를 포함

Untitled Workspace-4

전반적인 요소는 추가했으나 다음을 반영해야 함

  1. 수량을 입력하는 Custom Stepper
  2. 상품 재고가 부족한 경우 주문하기 버튼을 일시품절로 표시하고 비활성화
  3. 이벤트가 진행되지 않는 경우 이벤트 Label을 보이지 않도록 표시
  4. 이벤트가 진행중일 때 Discounted Price와 Price(가운데 줄)의 구분
  5. 상품 상세 설명 이미지 Scroll View에 이미지 추가 후 테스트 -> 주문하기 버튼과 상세 이미지 및 상세 이미지 하단에 여백 발생(Autolayout 문제로 추정)

추가로 반영된 사항

  1. 이벤트 Label과 주문하기 버튼 Corner Radius 적용
  2. 상품 이미지 Scroll View에 이미지 추가 후 테스트 성공

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.