Skip to content

CodeConvention

yuhaeun edited this page Apr 5, 2024 · 3 revisions

최대 줄길이

  • 80자

들여쓰기 및 띄어쓰기


  • 들여쓰기는 탭(4 space)
  • 콜론(:) 오른쪽에만 공백
  • 연산자 오버로딩 함수 정의에서는 연산자와 괄호 사이에 한 칸 띄어씁니다.

줄바꿈


함수 정의

  • 함수 정의가 최대길이를 넘는다면 파라미터 기준으로 줄바꿈

    func collectionView(
      _ collectionView: UICollectionView,
      cellForItemAt indexPath: IndexPath
    ) -> UICollectionViewCell {
      // doSomething()
    }
    func task(
    	name: String,
    	age: Int
    ) -> Human {
       //doSomething()
    }
  • 최대 길이를 넘지 않아도, 인자가 2개 이상이라면 파라미터 기준으로 줄바꿈

  • 리턴값이 최대길이를 넘는다면 한줄에는 리턴타입만 명시

    func collectionView(
    ) -> UICollectionView.SupplementaryRegistration<MagazineFooterView> {
      // doSomething()
    }

함수 호출

  • 클로저 파라미터 2개 이상일 시 호출 컨벤션
UIView.animate(withDuration: 0.25) {
    // doSomething()
  } completion: { finished in
    // doSomething()
  }
)

if let

if let user = self.a(), 
   let name = user.b(),
   user.gender == .female {
  // ...
}

guard let

  • else에 제어구문만 있다면 한줄로 작성
guard let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
      let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
      user.gender == .female
else { return,break,continue }
guard let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
      let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
      user.gender == .female
else { 
	self.name = name
	return 
}

if else

if a == b {
	var a = aslkdjf
	asdfkjl = asdfklsjadlf
} else {

}

클로저

  • 최대길이를 넘지 않으면 한줄에 명시 가능
tempArr.reduce(0, +)
tempArr.filter { $0 > $1 }
tempArr.map { self.xx = $0 + $1 }
  • () → Void
  • 인자 괄호사용하지 않음
  • 중첩 클로저일 때는 상위 클로저의 인자를 명시한다
a.map { a, b in
	b.map { 
		$0
}

MARK

  • 위 아래는 빈줄로 기입

import

  • 알파벳 순으로 정렬
// 내장 프레임워크
import UIKit

// 모듈
import Core
import Domain

// 서브파티
import SwiftyColor
import SwiftyImage
import Then
import URLNavigator

코드 순서

struct SearchResultView: View {
**// 우선순위: public 변수	-> private, fileprivate 변수**
**// PROPERTY**
1. 의존성 변수
2. Rx관련 변수
3. View관련 변수

**// FUNCTION**
4. init
5. Life Cycle
6. configureUI
7. bind
8. objc
9. override func
}

10. protocol별로 extension 분리
extension SearchResultView: ADelegate {
}

extension SearchResultView: BDelegate {
}

11. 중첩타입 extension 으로 분리
extension ViewModel {
	enum Status {
		case fetching, recieve
	}
}

변수

  • lowerCamelCase!!!가 우선
var urlSession
var sessionUrl
var maxInt
var intMax

enum

  • case 뒤는 줄바꿈
switch a {
		case .a: 
			print("하이")
		case .b:
			print("바이")
}