-
Notifications
You must be signed in to change notification settings - Fork 1
Tidify Coding Convention
Jeongsu Yeo edited this page Aug 5, 2022
·
1 revision
- 모듈 임포트는 알파벳 순으로 정렬합니다. 내장 프레임워크를 먼저 임포트하고, 빈 줄로 구분하여 서드파티 프레임워크를 임포트합니다.
// Good
import UIkit
import RxCocoa
import RxSwift
// Bad
import RxSwift
import UIKit
import RxCocoa
- 최대 가로 길이는 100자 제한, 글자수 초과시 개행합니다.
- Xcode의 Preferences → Text Editing → Display의 'Page guide at column' 옵션을 활성화하고 100자로 설정하면 편리합니다.
- 불필요한 괄호는 사용x, 괄호는 필요할 때만 사용합니다.
- 2개 이상의 데이터를 반환할 때는 튜플보다는 struct 고려, 튜플 사용시 각각의 필드에 이름을 붙이는것을 권장합니다.
- mutable을 보장해야 하는 경우가 아니라면 let을 통해 상수 사용합니다.
- 상속이 발생하지 않는 클래스에는 항상
final
키워드로 선언합니다. - 빈 줄에는 공백이 포함되지 않도록 합니다.
- lowerCamelCase: 함수, 메소드, 변수, 상수, 열거형 내 case 등에 사용
- UpperCamelCase: 클래스, 구조체, 열거형, Extension 등에 사용
- 들여쓰기는 탭(tab) 대신 2개의 space를 사용
- 콜론(:) 을 쓸 떄에는 콜론의 오른쪽에만 공백을 사용
// Good
let example: [String: String]
// Bad
let example: [String:String]
- 리턴 타입이 없는 경우 클로저는 () 대신 Void 사용, 함수는 생략합니다.
// Good
let completion: (() -> Void)?
// Bad
let completion: (() -> ())?
let completion: ((Void) -> (Void))?
- Closure 정의시 파라미터에는 괄호를 사용하지 않습니다.
// Good
{ operation, responseObject in
// doSomething()
}
// Bad
{ (operation, responseObject) in
// doSomething()
}
- 타입을 명시하여 타입 추론을 지양합니다.
// Good
let titleLabel: UILabel = .init()
// Bad
let titleLabel = UILabel()
- 함수 정의 및 호출 코드가 최대 길이를 초과하는 경우, 파라미터 이름을 기준으로 개행합니다.
func collectionView(
_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath
) -> UICollectionViewCell {
// doSomething()
}
func animationController(
forPresented presented: UIViewController,
presenting: UIViewController,
source: UIViewController
) -> UIViewControllerAnimatedTransitioning? {
// doSomething()
}
- 파라미터에 클로저가 2개 이상일 경우에는 반드시 내려쓰기합니다.
UIView.animate(
withDuration: 0.25,
animations: {
// doSomething()
},
completion: { finished in
// doSomething()
}
)
-
// MARK
: 연관된 코드 그룹핑, 해당 그룹에 대한 설명 명시합니다. -
// TODO
: 추가적으로 할 일을 명시합니다. -
///
를 사용하여 문서화에 사용되는 주석 작성을 지향합니다.