수색…


비고

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 = ...


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow