-
Notifications
You must be signed in to change notification settings - Fork 1
Coding Convention
EUNSU SEO edited this page Aug 15, 2023
·
8 revisions
-
lowerCamelCase
사용 - 복수의 의미를 담는 경우 끝에 s 붙이기
-
lowerCamelCase
사용 - 기본적으로 동사원형으로 시작
func printSomething(){
// ...
}
- 이벤트핸들링 함수의 경우
will
,did
를 붙여 시점에 대한 정보를 추가
func didFinishFetch(){
}
func willFinishFetch(){
}
func workDidChange(){
}
- 데이터를 가져오는 함수는
get
이 아닌fetch
,request
를 사용-
fetch
: 요청 실패없이 결과를 바로 반환할때 (func fetchData() -> Data
) -
request
: 데이터 요청 실패 가능성이 있는 함수 (func requestData() -> Data?
)
-
- 열거형의 이름은
UpperCamelCase
사용 - 각 case는
lowerCamelCase
사용
-
구조체 및 클래스 이름은
UpperCamelCase
사용 -
구조체 및 클래스 이름에 접두사 사용 X
-
프로퍼티 및 메서드는
lowerCamelCase
사용 -
계산속성 및 속성감시자가 있는 구조체 / 클래스 프로퍼티는 나머지 속성 선언 끝에 위치
// good
var name: String
var age: Int {
didSet {
print("26..")
}
}
// bad
var age: Int {
didSet {
print("26..")
}
}
var name: String
- 프로토콜로 델리게이트 패턴 구현
- 함수 첫번째 인자는 델리게이트 소스객체로 지정하며 아규먼트 레이블은 와일드카드 패턴으로 지정
// 델리게이트의 소스 객체만을 메서드의 인자로 받는 경우
protocol UserScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView)
func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool
}
// 델리게이트의 소스 객체 다음에 추가적인 인자를 받는 경우
protocol UserTableViewDelegate {
func tableView(
_ tableView: UITableView,
willDisplayCell cell: Cell,
cellForRowAt indexPath: IndexPath)
)
func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int
)
}
- 최대한 간결하게, 핵심만 작성
- 함수 및 메서드는 동작과 반환 형태에 대해 설명하며
nil
또는Void
리턴타입에 대해서는 설명 생략 - 퀵헬프를 통해 작성한 주석을 확인합니다.
///
를 붙여 주석을 작성- 첫줄에 함수 동작을 설명하고, 나머지는 마크다운 문법으로 작성 가능
/// 함수 동작 설명
/// - 파라미터1 설명
/// - 파라미터2 설명
func addData(name: String, age: Int){
}
- 개발중인 코드는
FIXME
또는TODO
로 추후 작업계획과 함께 표기
- 인덴테이션은 스페이스 4를 기본으로 지정
- 콜론 사용시 콜론기준 오른쪽에만 공백 한칸 삽입 (
let jun: Person
)
- 트레일링 클로져 다음 규칙에 맞춰 사용
- 클로저 파라미터 타입, 리턴타입은 유추
- 아규먼트 레이블 생략
- 소괄호 생략
// 1. 기본 함수
func someFunction(closure: (Int) -> Void) {
}
// 2. 규칙이 적용된 트레일링 클로져
func someFunction{ int in
}
- 타입 추론을 기본으로 하여 코드를 작성하며 필요한 경우에만 명시적 선언
- 타입은 단축구문으로 작성
// good
var member: [String: String]
// bad
var member: Dictionary<String, String>
- 모듈
import
는 알파벳 오름차순으로 정렬 - 단,
import UIKit
이나import Foundation
은 맨 위에 적고 한 줄 공백 후 다른 라이브러리를 적는다. - 중복된 것 제거
-
✨약어는 사용하지 않습니다.✨
- Btn → Button
- VC → ViewController
-
애매할 때 팀원들과 상의합니다.
-
Extension
파일은 ViewController+ 과 같이 명명합니다.ex) HomeViewController+
-
Extenstion 코드들은 우선 같은 파일 안에 넣습니다!
코드 각 섹션은 MARK
로 구분합니다.
- // MARK: - Subviews
- // MARK: - Properties
- // MARK: - Life Cycle
- // MARK: - Functions
- override
- render
- configUI
- helpers
- override
- // MARK: - @objc Functions