Skip to content

Code Convention

도찡 edited this page Nov 1, 2021 · 2 revisions

StyleShare Swift style guid를 참조했습니다.

들여쓰기 및 띄어쓰기

  • 들여쓰기는 tab (space 4개) 사용합니다.
  • 함수 정의 후 { 는 공백 한칸을 두고 사용합니다.
func foo() {
    //do something
}

줄바꿈

  • 함수를 정의,호출하는 코드가 최대 길이를 초과하는 경우에는 파라미터 이름을 기준으로 줄바꿈합니다.
let actionSheet = UIActionSheet(
  title: "정말 계정을 삭제하실 건가요?",
  delegate: self,
  cancelButtonTitle: "취소",
  destructiveButtonTitle: "삭제해주세요"
)
  • if let 구문이 길 경우에는 줄바꿈하고 한 칸 들여씁니다.
if let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
   let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
   user.gender == .female {
  // ...
}
  • guard let 구문이 길 경우에는 줄바꿈하고 한 칸 들여씁니다. else는 guard와 같은 들여쓰기를 적용합니다.
guard let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
      let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
      user.gender == .female
else {
  return
}

최대 줄 길이

  • 최대 줄 길이는 145로 합니다.

Import 구분

  • 모듈 임포트는 알파벳 순으로 정렬합니다. 내장 프레임워크를 먼저 임포트하고, 빈 줄로 구분하여 서드파티 프레임워크를 임포트합니다.
import UIKit

import SwiftyColor
import SwiftyImage
import Then
import URLNavigator

MARK/TODO 규칙

  • Static Properties : CellIdentifier
  • Subviews : ViewController/View에 자식으로 들어가게 될 View들

보여지는 순서대로?

  • Public Properties : UILabel로 치면 title 같은 것
  • Private Properties

Constant 먼저 쓰고 개행 후 Variable을 작성해준다.

  • Initializers : 생성자
  • Lifecycle Methods : viewDidLoad, viewWillAppear 등 라이프사이클
  • Helpers : Configure, bind 메소드들
  • Private Methods : 내부에서 호출하게 되는 함수 e.g. buttonTapped()
  • Public Methods : 외부에서 호출하게 되는 함수 e.g setTitle()
  • FIXME : 이후에 고쳐져야하는 것들에 대한 표시

프로그래밍 권장사항

  • self 는 다 쓰기
  • final 은 상속이 필요하지 않은 class에 모두 명시하기
  • 프로토콜을 적용할 때에는 extension을 만들어서 관련된 메서드
  • 컬러의 경우 Assets.xcassetes에 넣고, UIColorextension으로 관리한다.

Naming Convention

함수

  • Action 함수의 네이밍은 '주어 + 동사 + 목적어' 형태를 사용합니다.

    • Tap(눌렀다 뗌) 은 UIControlEvents의 .touchUpInside에 대응하고, Press(누름) 는 .touchDown에 대응합니다.
    • will은 특정 행위가 일어나기 직전이고, did는 특정 행위가 일어난 직후입니다.
    • should~는 일반적으로 Bool을 반환하는 함수에 사용됩니다.
    func backButtonDidTap() {
        // ...
    }