- 함수를 호출하는 코드가 최대 길이를 초과하는 경우에는 파라미터 이름을 기준으로 줄바꿈한다.
```swift
let actionSheet = UIActionSheet(
title: "정말 계정을 삭제하실 건가요?",
delegate: self,
cancelButtonTitle: "취소",
destructiveButtonTitle: "삭제해주세요"
)
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
}
최대 줄 길이
한 줄은 최대 99자를 넘지 않아야 한다.
Xcode의 Preferences -> TextEditing -> Display의 'Page guide at column' 옵션을 활성화하고 99자로 설정하면 편리하다.
// ❌
let completionBlock: (() -> ())?
let completionBlock: ((Void) -> (Void))?
- Closure 정의시 파라미터에는 괄호를 사용하지 않는다.
- Closure 정의시 가능한 경우 타입 정의를 생략한다.
- Closure 호출 시, 또 다른 유일한 Closure를 마지막 파라미터로 받는 경우, 파라미터 이름을 생략한다.
## 클래스와 구조체
- 클래스와 구조체 내부에서는 `self`를 명시적으로 사용한다.
- 구조체를 생성할 때에는 Swift구조체 생성자를 사용한다.
## 타입
- `Array<T>`와 `Dictionary<T: U>`보다는` [T]`, `[T: U]`를 사용한다.
## 주석
- `///`를 사용해서 문서화에 사용되는 주석을 남긴다.
```swift
/// 사용자 프로필을 그려주는 뷰
class ProfileView: UIView {
var nameLabel: UILabel!
}
// MARK:를 사용해서 연관된 코드를 구분짓는다.
프로그래밍 권장사항
가능하다면 변수를 정의할 때 함께 초기화하도록 한다. Then을 사용하면 초기화와 함께 속성을 지정할 수 있다.
상수를 정의할 때에는 enum을 만들어 비슷한 상수끼리 모아둔다. 재사용성과 유지보수 측면에서 큰 향상을 가져온다. struct 대신 enum을 사용하는 이유는, 생성자가 제공되지 않는 자료형을 사용하기 위해서이다.
final class ProfileViewController: UIViewController {
private enum Metric {
static let profileImageViewLeft = 10.f
static let profileImageViewRight = 10.f
static let nameLabelTopBottom = 8.f
static let bioLabelTop = 6.f
}
private enum Font {
static let nameLabel = UIFont.boldSystemFont(ofSize: 14)
static let bioLabel = UIFont.boldSystemFont(ofSize: 12)
}
private enum Color {
static let nameLabelText = 0x000000.color
static let bioLabelText = 0x333333.color ~ 70%
}
}
이렇게 선언된 상수들은 다음과 같이 사용될 수 있다.
```swift
self.profileImageView.frame.origin.x = Metric.profileImageViewLeft
self.nameLabel.font = Font.nameLabel
self.nameLabel.textColor = Color.nameLabelText
본 컨벤션은 StyleShare의 swift-style-guide에서 가져왔습니다. 프로젝트에 들어가기 전, 다시 한번 숙지하기 위하여 작성해보았습니다. 이 외에도, 매 프로젝트에 들어가기 전에 정하면 좋을 것 같은 컨벤션들은 아래 몇가지가 더 있습니다.
목차
코드 레이아웃
들여쓰기 및 띄워쓰기
:
)을 쓸 때에는 콜론의 오른쪽에만 공백을 둔다.줄바꿈
func animationController( forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController ) -> UIViewControllerAnimatedTransitioning? { // doSomething() }
if let
구문이 길 경우에는 줄바꿈하고 한 칸 들여쓴다.guard let
구문이 길 경우에는 줄바꿈하고 한 칸 들여쓴다.else
는guard
와 같은 들여쓰기를 적용한다.최대 줄 길이
빈 줄
임포트
네이밍
클래스
함수
get
을 붙이지 않는다.UIControlEvents
의.touchUpInside
에 대응하고, Press(누름)은.touchDown
에 대응한다.Bool
을 반환하는 함수에 사용한다.변수
상수
열거형
약어
Delegate
클로저
()->Void
를 사용한다.// ❌ let completionBlock: (() -> ())? let completionBlock: ((Void) -> (Void))?
// MARK:
를 사용해서 연관된 코드를 구분짓는다.프로그래밍 권장사항
상수를 정의할 때에는
enum
을 만들어 비슷한 상수끼리 모아둔다. 재사용성과 유지보수 측면에서 큰 향상을 가져온다.struct
대신enum
을 사용하는 이유는, 생성자가 제공되지 않는 자료형을 사용하기 위해서이다.}
final
키워드로 선언한다.