-
Notifications
You must be signed in to change notification settings - Fork 1
코드 컨벤션
- 클래스와 구조체의 이름은 UpperCamelCase를 사용합니다.
- 클래스 이름에는 접두사(Prefix)를 붙이지 않습니다.
-
list, array 같은 네이밍은 지양, 복수형 사용 지향합니다.
-
액션 함수의 네이밍은 '동사 + 목적어' 형태를 사용합니다.
- ex)
buttonDidTapped
- ex)
-
만약 특정 View에서 일어난 것을 명시하고 싶다면,
buttonDidTappedAtLoginView과 같이At뒤에 View를 명시합니다.- sender를 보낼 수 있으면 우선적으로 보낸다.
-
will은 특정 행위가 일어나기 직전이고,did는 특정 행위가 일어난 직후입니다. -
should,is는 일반적으로Bool을 반환하는 함수에 사용됩니다. -
self는 생략을 원칙으로 합니다. -
함수명 혹은 프로퍼티가 가려질 때만
self를 사용합니다. -
뷰 레이아웃 메서드는 아래와 같은 네이밍으로 작성합니다.
func setupViewAttributes() {} func setupViewHierarchies() {} func setupViewConstraints() {} -
UI 컴포넌트는 프로퍼티로 생성을 한다음,
setupViewAtrributes()에서 속성을 정의합니다. -
UI 컴포넌트는 타입을 지정하고
.init으로 생성하지 않습니다. -
required init?(coder: NSCoder)에는@available(*, unavailable)을 붙여 코드베이스 환경을 지킵니다.@available(*, unavailable) required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
-
private메서드는extension에 작성합니다.
private extension SomeClass { }- bind 메서드 extension, ui 관련 메서드 extension, delegate extension 처럼 extension을 사용하여 구분합니다.
- 프로토콜은 익스텐션에서 채택하고 준수합니다.
-
약어는 소문자로 표기합니다.
let userId: Int? let html: String? let websiteUrl: URL? let urlString: String?
- 변수에 접미사로 뷰의 타입을 붙입니다.
- Array와 Dictionary<T: U> 보다는 [T], [T: U]를 사용합니다.
- 상수를 정의할 때에는 enum를 만들어 비슷한 상수끼리 모아둡니다. 재사용성과 유지보수 측면에서 큰 향상을 가져옵니다. struct 대신 enum을 사용하는 이유는, 생성자가 제공되지 않는 자료형을 사용하기 위해서입니다
-
콜론(:)을 쓸 때에는 콜론의 오른쪽에만 공백을 둡니다.
let names: [String: String]?
- 한 줄은 최대 120자를 넘지 않아야합니다. → lint 룰 적용
-
함수 정의가 최대 길이를 초과하거나, 파라미터가 3개 이상인 경우에는 아래와 같이 줄바꿈합니다.
// 출처 : https://github.com/StyleShare/swift-style-guide func collectionView( _ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath ) -> UICollectionViewCell { // doSomething() } func animationController( forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController ) -> UIViewControllerAnimatedTransitioning? { // doSomething() }
-
함수를 호출하는 코드가 최대 길이를 초과하거나, 파라미터가 3 개 이상인 경우에는 파라미터 이름을 기준으로 줄바꿈합니다.
// 출처 : https://github.com/StyleShare/swift-style-guide let actionSheet = UIActionSheet( title: "정말 계정을 삭제하실 건가요?", delegate: self, cancelButtonTitle: "취소", destructiveButtonTitle: "삭제해주세요" )
-
단, 파라미터에 클로저가 2개 이상 존재하는 경우에는 무조건 내려쓰기합니다.
// 출처 : https://github.com/StyleShare/swift-style-guide UIView.animate( withDuration: 0.25, animations: { // doSomething() }, completion: { finished in // doSomething() } )
-
if let구문이 길 경우에는 줄바꿈하고 한 칸 들여씁니다.// 출처 : https://github.com/StyleShare/swift-style-guide if let user = self.veryLongFunctionNameWhichReturnsOptionalUser(), let name = user.veryLongFunctionNameWhichReturnsOptionalName(), user.gender == .female { // ... }
-
guard let구문이 길 경우에는 줄바꿈하고 한 칸 들여씁니다.else는guard와 같은 들여쓰기를 적용합니다.// 출처 : https://github.com/StyleShare/swift-style-guide guard let user = self.veryLongFunctionNameWhichReturnsOptionalUser(), let name = user.veryLongFunctionNameWhichReturnsOptionalName(), user.gender == .female else { return }
-
축약 바인딩이 가능하다면, 축약바인딩을 사용합니다.
let someProperty: Any? if let someProperty { }
- 모든 파일은 빈 줄로 끝나도록 합니다.
- MARK 구문 위는 공백이 필요하며 MARK 구문은 아래에 붙여 사용합니다.
// MARK: - 이런식으로- 마크다운은 다음과 같은 것을 구분합니다.
- UI Component
- Initializers
- Life Cycle
- Extension마다 (Private Extension, Delegate…)
-
데모 코드에는 주석을 반드시 남깁니다.
// 데모 코드에는 주석을 반드시 남깁니다. titleLabel.text = "SSSSSS"
-
public 함수에는 설명하는 주석을 반드시 남깁니다.
///public 함수에는 설명하는 주석을 반드시 남깁니다. func foo(){ }
- 임포트는 알파벳 순으로 정렬합니다.