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