스위프트 프로토콜 예제

프로토콜은 메서드, 속성 및 기타 요구 사항 기능에 대한 청사진을 제공합니다. 구현 대신 메서드 또는 속성 스켈레톤으로 설명됩니다. 메서드 및 속성 구현은 클래스, 함수 및 열거를 정의하여 더 수행할 수 있습니다. 프로토콜의 적합성은 프로토콜의 요구 사항을 충족하는 메서드 또는 속성으로 정의됩니다. 참고: 이전에 Swift 2.x의 CollectionType으로 알려진 프로토콜은 Swift 3의 컬렉션으로 이름이 바뀌었습니다. Swift 프로토콜 및 프로토콜 확장을 사용하면 작성하는 코드가 대부분의 동적 프로그래밍 언어만큼 표현력이 풍부하고 컴파일 시 형식이 안전할 수 있습니다. 이렇게 하면 코드의 재사용성 및 유지 관리 가능성을 보장하고 보다 자신있게 Swift 앱 코드베이스를 변경할 수 있습니다. 프로토콜은 또한 클래스, 구조 및 열거와 유사한 구문을 따릅니다 – 폴 허드슨은 스위프트와 해킹의 창조자입니다, 스위프트 책의 가장 포괄적 인 시리즈. 그는 또한 스위프트 개발자 뉴스의 편집자, 스위프트 지식 기반의 메인테이너, 마리오 카트 세계 챔피언. 그래, 그래서 마지막 부분은 사실이 아니다. 궁금한 점은 여기에서 자세히 알아볼 수 있습니다. 프로토콜 상속을 통해 기존 프로토콜을 결합하는 새 프로토콜을 만들 수 있어 반복과 누락될 가능성을 줄입니다. 그래서 위의 대신 우리는이것을 쓸 수 있습니다 : 나는 프로토콜이 많은 장점을 제공하고, 거의 큰 Swift 프로젝트에서 주식이라는 데 동의하지만, 개인적으로 나는 막 시작했을 때 구체적인 유형에 대해 생각하기가 더 쉽다는 것을 알게되었습니다.

그런 다음 더 많은 작업을 수행하거나 기능을 공유하기 위해 확장해야하는 경우 프로토콜을 만들고 프로토콜 확장을 통해 기능을 이동합니다. 그러나 필요할 때만 그렇게합니다 – 향후 공유 기능에 필요한 프로토콜의 종류를 미리 예측하려고하지 않습니다. Swift는 항상 준수 형식이 구현되도록 보장하기 때문에 drawCustomComponents())를 안전하게 호출할 수 있습니다. 프로토콜은 클래스, 구조 및 열거형에서 사용할 수 있지만 기본 클래스 및 상속은 클래스에만 사용할 수 있습니다. 프로토콜을 확장하여 메서드, 초기화자, 하위 스크립트 및 계산된 속성 구현을 준수 형식에 제공할 수 있습니다. 이를 통해 각 형식의 개별 적합성이나 전역 함수가 아닌 프로토콜 자체에 대한 동작을 정의할 수 있습니다. 고유한 프로토콜을 확장하는 것 외에도 Swift 표준 라이브러리에서 프로토콜을 확장할 수 있습니다. 예를 들어 큐 컬렉션의 평균 크기를 찾으려면 표준 컬렉션 프로토콜을 확장하여 큐를 확장할 수 있습니다. 위의 예에서 SomeClassOnlyProtocol클래스 형식에 의해서만 채택할 수 있습니다. SomeClassOnlyProtocol을 채택하려고 하는 구조체 또는 열거 정의를 작성하는 컴파일 타임 오류입니다. 프로토콜에는 준수 형식이 구현할 수 있는 일반 메서드와 같은 특정 초기화가 있을 수 있습니다.

Swift의 표준 라이브러리에서 제공하는 시퀀스 데이터 구조는 인덱싱된 하위 스크립트를 통해 요소를 트래버스하고 액세스할 수 있으며 일반적으로 컬렉션 프로토콜을 준수합니다. 프로토콜 확장을 통해 이러한 모든 표준 라이브러리 데이터 구조를 확장하거나 그 중 일부를 선택적으로 확장할 수 있습니다. 프로토콜에는 선택적 메서드 및 속성이 있을 수 있습니다. 이러한 요구 사항은 프로토콜을 준수하는 형식에 의해 구현될 필요는 없습니다. 프로토콜 확장은 프로토콜의 굉장함을 기반으로 합니다. 위의 두 규칙이 메서드 호출을 완전히 모호하게 하지 않으면 Swift는 코드 컴파일을 거부합니다. 동시에 여러 프로토콜을 준수하는 형식을 요구하는 것이 유용할 수 있습니다. 여러 프로토콜을 프로토콜 컴포지션을 통해 단일 요구 사항으로 결합할 수 있습니다. 프로토콜 컴포지션은 컴포지션의 모든 프로토콜의 결합된 요구 사항이 있는 임시 로컬 프로토콜을 정의한 것처럼 행동합니다. 프로토콜 컴포지션은 새 프로토콜 형식을 정의하지 않습니다. 많은 개체 지향 프로그래밍 언어는 모호한 확장 정의의 해결을 둘러싼 제한에 시달리고 있습니다.

カテゴリー: 未分類   パーマリンク

コメントは受け付けていません。