---
# System prepended metadata

title: S3 - Week 2

---

# S3 - Week 2

## 캠퍼들 👥
- S007_김민주 👩🏻‍💻
- S018_박영광 👨🏻‍💻
- S021_박정아 👩🏻‍💻
- S031_오현식 👨🏻‍💻
- S038_이세은 👩🏻‍💻
- S045_이지수 👩🏻‍💻
- S050_이하원 👨🏻‍💻
- S054_정택현 👨🏻‍💻

</br>

## 쉬는시간 ☀️
- 14:25 - 14:35
- 15:20 - 15:30
- 16:20 - 16:30

</br>

## 주제 📝
### 뷰 구성 📱
- Code? Storyboard?
    - Code
    - SnapKit
        - 가독성이 좋다
    - Storyboard
        - 실행시키지 않은 상태에서도 뷰를 바로 볼 수 있다.
- UIStackView
    - 카드 뷰를 숨기는 방법
        - BorderWidth : 0, text : "" 으로 설정하는 방법
        - opacity를 0으로 조정하는 방법
    - UIStackView 안에 view 4개 넣고 선을 추가로 넣음.
        - 마지막 Bot의 뷰만 작게 나오는 문제
            - 우선순위를 낮춰보기
    - UIStackView 안에 IUStackView 3개 넣고 선 넣고 추가로 IUStackView 넣음. 
        - 카드의 크기를 지정하여 항상 같은 크기로 보이게 함.
    - xib
        - View를 재사용할 수 있음.
    - dotted view
        - @IBDesignable
            - 코드로 짠 내용을 Storyboard 상에서 볼 수 있도록 해줌
- UISegmentedControl
    - Index로 접근

</br>

### 승자 판단 로직 🥇
- enum 사용
    - up, zero, bust를 서로 비교해서 승자 리턴
- score 직접 비교
    - 21이하의 점수를 가진 플레이어를 정렬하여 리턴
        - 승자가 없을 때 `""`리턴
        - 승자가 없을 때 `nil` 리턴
- Player, Robot 프로토콜 채택? 클래스 상속?
    - 클래스 상속
        - Playable class 내 공통된 함수들 작성
    - 프로토콜 채택
        - protocol extension을 이용해 공통 함수 작성
- Sequence 사용
    - IteratorProtocol을 함께 채택해야함.
        - Sequence가 IteratorProtocol을 직접 채택하지는 않고 Sequence의 프로퍼티가 IteratorProtocol를 채택하고 있기 때문
    - Iteration이 중간에 끊기면 다음 반복 시 처음부터 시작할 지 끊긴 부분부터 시작할 지 알 수 없음
        따라서 항상 첫 부분부터 반복(= nondestructive iteration)을 하기 위해 Collection프로토콜을 사용하는 것이 좋아보임 
        - Collection 프로토콜은 Sequence 프로토콜을 채택하는 하위 프로토콜


### 꿀팁 🍯
- [Swift Style Guide](https://jusung.github.io/Swift-Code-Convention/#23-%ED%95%A8%EC%88%98)
    
    get은 함수명으로 되도록 쓰지 말자
    private(set)으로 하는게 나을 듯 하다.