Swift Language
스타일 협약
수색…
비고
Swift에는 Swift.org API 디자인 가이드 라인이 있습니다. 또 다른 인기있는 가이드는 공식 raywenderlich.com Swift Style Guide입니다.
명확한 사용법
모호성을 피하십시오.
클래스, 구조, 함수 및 변수의 이름은 모호성을 방지해야합니다.예:
extension List {
public mutating func remove(at position: Index) -> Element {
// implementation
}
}
이 함수에 대한 함수 호출은 다음과 같습니다.
list.remove(at: 42)
이렇게하면 모호함을 피할 수 있습니다. 함수 호출이 list.remove(42)
일 경우, 42와 같은 요소가 제거되거나 인덱스 42의 요소가 제거되는 경우 명확하지 않습니다.
중복 방지
함수의 이름에는 중복 정보가 들어 있으면 안됩니다.나쁜 예가 있습니다 :
extension List {
public mutating func removeElement(element: Element) -> Element? {
// implementation
}
}
함수 호출은 list.removeElement(someObject)
처럼 보일 수 있습니다. 변수 someObject
이미 요소가 제거되었음을 나타냅니다. 함수 서명이 다음과 같이 표시되는 것이 좋습니다.
extension List {
public mutating func remove(_ member: Element) -> Element? {
// implementation
}
}
이 함수의 호출은 다음과 같습니다 : list.remove(someObject)
.
역할에 따라 변수 명명
변수의 유형 (예 : 공장, 문자열 등) 대신 역할 (예 : 공급 업체, 인사말)을 사용하여 이름을 지정해야합니다.프로토콜 이름과 변수 이름 간의 높은 결합
유형의 이름이 대부분의 경우 그 역할을 설명하는 경우 (예 : Iterator) 형식의 접미사 이름은 'Type`이어야합니다. (예 : IteratorType)약형 매개 변수를 사용할 때 추가 세부 사항 제공
객체의 유형이 함수 호출에서 그 사용법을 명확하게 나타내지 않는다면 함수는 약하게 유형화 된 모든 매개 변수에 대해 사용법을 설명하는 선행 명사를 사용하여 이름을 지정해야합니다.예:
func addObserver(_ observer: NSObject, forKeyPath path: String)
호출은`object.addObserver (self, forKeyPath : path)와 같이 보일 것입니다.
대신에
func add(_ observer: NSObject, for keyPath: String)
호출 대상은 object.add(self, for: path)
유창한 사용법
자연어 사용
함수 호출은 자연어에 가깝습니다.예:
list.insert(element, at: index)
대신에
list.insert(element, position: index)
네이밍 팩토리 메소드
팩토리 메소드는 접두사`make`로 시작해야합니다.예:
factory.makeObject()
초기화 메소드 및 팩토리 메소드에서의 이름 지정 매개 변수
최초의 인수의 이름은, 팩토리 메소드 또는 이니셜 라이저의 네이밍에 관련해서는 안됩니다.예:
factory.makeObject(key: value)
대신에:
factory.makeObject(havingProperty: value)
부작용에 따른 이름 지정
- 부작용 (돌연변이 함수)이있는 함수의 이름은
form-
접두어가 붙은 동사 또는 명사를 사용하여 지정해야합니다. - 부작용이없는 함수 (돌연변이가 아닌 함수)는 접미사
-ing
또는-ed
가 붙은 명사 또는 동사를 사용하여 명명해야합니다.
print(value)
array.sort() // in place sorting
list.add(value) // mutates list
set.formUnion(anotherSet) // set is now the union of set and anotherSet
비 돌연변이 기능 :
let sortedArray = array.sorted() // out of place sorting
let union = set.union(anotherSet) // union is now the union of set and another set
부울 함수 또는 변수
부울을 포함하는 문은 어설 션으로 읽어야합니다.예:
set.isEmpty
line.intersects(anotherLine)
이름 지정 프로토콜
- 무엇이 무엇인지 설명하는 프로토콜은 명사를 사용하여 명명해야합니다.
- 능력을 기술하는 프로토콜은 접미사로서
-able
,-ible
또는-ing
을 가져야합니다.
Collection // describes that something is a collection
ProgressReporting // describes that something has the capability of reporting progress
Equatable // describes that something has the capability of being equal to something
유형 및 속성
유형, 변수 및 속성은 명사로 읽어야합니다.예:
let factory = ...
let list = [1, 2, 3, 4]
자본화
유형 및 프로토콜
유형 및 프로토콜 이름은 대문자로 시작해야합니다.
예:
protocol Collection {}
struct String {}
class UIView {}
struct Int {}
enum Color {}
그 밖의 모든 것 ...
변수, 상수, 함수 및 열거 형은 소문자로 시작해야합니다.
예:
let greeting = "Hello"
let height = 42.0
enum Color {
case red
case green
case blue
}
func print(_ string: String) {
...
}
낙타 사례 :
모든 이름은 적절한 낙타의 경우를 사용해야합니다. 형식 / 프로토콜 이름에 대한 위의 낙타 케이스와 그 밖의 모든 것에 대한 낙타 케이스.
어퍼 카멜 케이스 :
protocol IteratorType { ... }
낮은 카멜 케이스 :
let inputView = ...
약어
약자는 일반적으로 사용되지 않는 한 피해야합니다 (예 : URL, ID). 약어를 사용하는 경우 모든 문자는 대소 문자를 구분해야합니다.
예:
let userID: UserID = ...
let urlString: URLString = ...