🔥 WE SOPT 29th 합동 세미나 11조 iOS 팀 프로젝트 레포지터리입니다.
🌼 Team Potato 🥔🥔🥔
@heerucan | @ningpop | @yujinnee |
---|---|---|
![]() |
![]() |
![]() |
DetailView |
MainView |
MainView |
MainView
의 경우 공동 구현이 아닌 각자 구현하는 방식으로 진행합니다.
🔥 진짜 꼭 지킵시다!
🔥 스타일쉐어의 스위스트 스타일 가이드를 참고합니다.
💬 💬 💬
-
콜론(
:
)을 쓸 때에는 콜론의 오른쪽에만 공백을 둡니다.let names: [String: String]?
-
빈 줄은 딱 한 줄 정도만.. 너무 많은 빈 줄은 지양합니다.
-
MARK
구문 위와 아래에는 공백이 필요합니다.// MARK: Layout override func layoutSubviews() { // doSomething() } // MARK: Actions override func menuButtonDidTap() { // doSomething() }
-
MARK
구문의 순서는 아래와 같습니다.// MARK: - Properties // MARK: - Lifecycle override func viewDidLoad() { super.viewDidLoad() } // MARK: - Override Method UI + Layout override func configUI() { } override func setupAutoLayout() { } // MARK: - Custom Method // MARK: - @objc
-
Cell
파일은// MARK: - Lifecycle
대신 아래와 같습니다.// MARK: - Initializing override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) } required convenience init?(coder aDecoder: NSCoder) { self.init(style: .default, reuseIdentifier: nil) }
-
Delegate
나Datasource
를extension
으로 빼줄 경우 위에 마크구문을 꼭 써줘야 합니다.// MARK: - UICollectionViewDelegate extension MainVC: UICollectionViewDelegate { ... }
-
모듈 임포트는
알파벳 순
으로 정렬합니다. -
내장 프레임워크를 먼저 임포트하고, 빈 줄로 구분하여 서드파티 프레임워크를 임포트합니다.
import UIKit import SwiftyColor import SwiftyImage import Then import URLNavigator
-
Action
함수의 네이밍은 '주어 + 동사 + 목적어' 형태를 사용합니다.- Tap(눌렀다 뗌) 은
.touchUpInside
에 대응하고, - Press(누름) 는
.touchDown
에 대응합니다. - will~ 은 특정 행위가 일어나기 직전이고, did~ 는 특정 행위가 일어난 직후입니다.
- should~ 는 일반적으로
Bool
을 반환하는 함수에 사용됩니다.
func backButtonDidTap() { // ... } touchUpBackButton
- Tap(눌렀다 뗌) 은
-
가능하다면 변수를 정의할 때 함께 초기화하도록 합니다.
-
Then 라이브러리를 사용하면 초기화와 함께 속성을 지정할 수 있습니다.
let label = UILabel().then { $0.textAlignment = .center $0.textColor = .black $0.text = "Hello, World!" }
var job: String = "iOS Programmer"
-
상수를 정의할 때에는
enum
를 만들어 비슷한 상수끼리 모아둡니다.재사용성과 유지보수 측면에서 큰 향상을 가져옵니다.
struct
대신enum
을 사용하는 이유는, 생성자가 제공되지 않는 자료형을 사용하기 위해서입니다. -
CGFloatLiteral과 SwiftyColor를 사용해서 코드를 단순화시킵니다.
final class ProfileViewController: UIViewController { private enum Metric { static let profileImageViewLeft = 10.f static let profileImageViewRight = 10.f static let nameLabelTopBottom = 8.f static let bioLabelTop = 6.f } private enum Font { static let nameLabel = UIFont.boldSystemFont(ofSize: 14) static let bioLabel = UIFont.boldSystemFont(ofSize: 12) } private enum Color { static let nameLabelText = 0x000000.color static let bioLabelText = 0x333333.color ~ 70% } }
-
더이상 상속이 발생하지 않는 클래스는 항상
final
키워드로 선언합니다.final class MyViewController: UIViewController { // ... }
ViewController
,TableViewCell
,CollectionViewCell
VC
,TVC
,CVC
로 축약해서 사용합니다.
🔥 참고자료
💬 💬 💬
1. Issue를 생성한다.
2. feature Branch를 생성한다.
3. Add - Commit - Push - Pull Request 의 과정을 거친다.
4. Pull Request가 작성되면 작성자 이외의 다른 팀원이 Code Review를 한다.
5. Code Review가 완료되면 Pull Request 작성자가 develop Branch로 merge 한다.
6. 종료된 Issue와 Pull Request의 Label과 Project를 관리한다.
- FEAT : 새로운 기능 구현
- ADD : Feat 이외의 부수적인 코드 추가, 라이브러리 추가, 새로운 View나 Activity 생성
- CHORE : 그 이외의 잡일/ 버전 코드 수정, 패키지 구조 변경, 파일 이동, 가독성이나 변수명, reformat 등
- FIX : 버그, 오류 해결
- DEL : 쓸모없는 코드 및 파일 삭제
- MOD : xml (스토리보드) 파일만 수정한 경우
- DOCS : README나 WIKI 등의 문서 개정
- REFACTOR : 내부 로직은 변경 하지 않고 기존의 코드를 개선하는 리팩토링 시
`Prefix` 가 헷갈릴 때 참고해주세요!
[ADD] 홈 테이블뷰 높이 관련 코드 추가(#1)
[FEAT] 홈 기능 구현**(#2)
[CHORE] 홈 셀 레이아웃 코드 수정(#2)
[MOVE] 홈 폴더 파일 이동(#2)
[FIX] 홈 셀 리로드 버그 해결(#3)
[DEL] 필요없는 주석 삭제(#2)
<prefix 소문자로>/<이슈번호>-<관련설명>
→ 대소문자 꼭 지켜주세요!
feature/2-HomeLayout
feature/10-HomeService
- Template 사용
- 라벨 달기
- 프로젝트 칸반보드 체크 필수
- Template 사용 (내용 꼼꼼하게 작성)
- Code Review 24시간 내로
- Approved 걸고 코리 받으면 자기자신이 Click
💬 💬 💬
🗂 Tabling-iOS
│
│
|── 📂 Global
│ │
│ |── 📁 Base
│ |── 📁 Constant
│ |── 📁 Extension
│ └── 📁 Protocol
│
│── 📂 Source
│ |── 📁 Model
│ |── 📁 Network
│ └── 📁 Screen
│ │
│ |── TabbarController
│ |── 📁 Yujin
│ | |── 📁 VC
│ | |── 📁 Cell
│ | └── 📁 Component
│ |── 📁 Namjoon
│ | |── 📁 VC
│ | |── 📁 Cell
│ | └── 📁 Component
│ |── 📁 Ruhee
│ | |── 📁 VC
│ | |── 📁 Cell
│ | └── 📁 Component
│ |
│ └── 📁 MyPage
│
└── 📂 Resource
|
|── 📁 Support
| |── AppDelegate.swift
| └── SceneDelegate.swift
|
|── 📁 Storyboard
| |── LaunchScreen.storyboard
| |── Main.storyboard
| |── NamjoonMain.storyboard
| └── YujinMain.storyboard
|
|── Assets.xcassets
└── Info.plist