이 답변이 작성된 이후 몇 년 동안 Swift는 크게 발전했습니다. 설계 지침서에 다음과 같이 명시되어 있습니다 .
무언가 를 명사로 읽어야 하는 것을 설명 하는 프로토콜 (예 :) Collection
.
설명 프로토콜 기능이 접미사를 사용하여 이름을 지정해야합니다 able
, ible
또는 ing
(예를 들어 Equatable
, ProgressReporting
).
이것을 발견해 주신 David James 에게 감사합니다 !
원래 답변
헝가리어 표기법의 일부 형식을 사용하는 것이 좋습니다. 유형 시스템 내부에서 인코딩 할 수없는 중요한 개념을 나타내는 것입니다. 그러나, 어떤 식별자가 프로토콜을 지칭한다는 사실 이다 스위프트 (및 C 번호)의 입력 시스템의 일부분과 같은 임의의 접두사 또는 접미사로서 만 노이즈를 추가한다. 예외 또는 이벤트와 같은 개념에는 명확한 접두사 또는 접미사가 더 좋습니다.
Swift를위한 공식적인 스타일 가이드가 없다면, 우리는 자체 가이드를 만들거나 기존 가이드 나 코드에서 빌려야합니다. 예를 들어, Cocoa 용 Objective-C 스타일 안내서에는 다음 섹션이 포함되어 있습니다.
프로토콜은 동작을 그룹화하는 방법에 따라 이름을 지정해야합니다.
대부분의 프로토콜은 특정 클래스와 관련되지 않은 관련 메소드를 그룹화합니다. 이 프로토콜 유형은 프로토콜이 클래스와 혼동되지 않도록 이름을 지정해야합니다. 일반적인 규칙은 gerund ( "... ing") 형식을 사용하는 것입니다.
NSLocking
- 좋은.
NSLock
– 나쁨 (강의 이름처럼 보입니다).
일부 프로토콜은 여러 개의 별개의 작은 프로토콜을 만드는 대신 관련되지 않은 여러 방법을 그룹화합니다. 이러한 프로토콜은 프로토콜의 주요 표현 인 클래스와 연관되는 경향이 있습니다. 이 경우 규칙은 프로토콜과 클래스 이름을 동일하게 지정하는 것입니다.
이러한 종류의 프로토콜의 예는 NSObject
프로토콜입니다. 이 프로토콜은 클래스 계층에서의 위치에 대한 객체를 쿼리하고 특정 메서드를 호출하고 참조 횟수를 늘리거나 줄이는 데 사용할 수있는 메서드를 그룹화합니다. 때문에 NSObject
클래스는 이러한 방법의 주요 표현을 제공하는 프로토콜은 클래스의 이름을 따서 명명된다.
그러나 두 번째 요점의 조언은 더 이상 적용되지 않습니다.
클래스와 프로토콜의 네임 스페이스가 Swift에서 통합되었으므로 NSObject
Objective-C 의 프로토콜 NSObjectProtocol
이 Swift에서 다시 매핑됩니다 . ( 소스 )
여기서 …Protocol
접미사는 프로토콜을 명확하게하기 위해 사용되었습니다.
스위프트 표준 라이브러리는 프로토콜을 포함하고 Equatable
, Comparable
하고 Printable
. 이들은 Cocoa“… ing”형식을 사용하지 않고“… able”접미사를 사용하여이 유형의 인스턴스가 특정 작업을 지원해야한다고 선언합니다.
결론
프로토콜에 하나의 관련 구현 만있는 경우에는“… 프로토콜”접미사가 의미가 있으므로 클래스와 프로토콜의 이름이 동일 할 수 있습니다. 그러나 이는 그러한 경우에만 제한되어야합니다.
그렇지 않으면 이름은이 프로토콜에 포함 된 작업을 반영하는 명사 여야합니다. 동사의“… ing”또는“… able”형식을 사용하는 것이 좋은 출발점이 될 수 있으며 이러한 이름은 클래스 이름과 충돌하지 않을 것입니다.
이름 EquatableProtocol
은 권장되지 않습니다 . 이름 Equatable
이나 Equating
훨씬 나아질 것이며 클래스가 이름을 갖기를 기대하지 않습니다 Equatable
. 이 경우 Protocol
접미사는 잡음입니다.