swift protocol 예제

증분에서 값을 검색할 수 없는 경우(forCount:) 메서드-dataSource가 전무이거나 데이터 원본이 증분을 구현하지 않기 때문에(forCount:)-증분() 메서드는 데이터 원본의 fixedIncrement 속성에서 값을 검색하려고 시도합니다. fixedIncrement 속성은 선택적 요구 사항이기도 하므로 fixedIncrement는 CounterDataSource 프로토콜 정의의 일부로 비 선택적 Int 속성으로 정의 되 더라도 해당 값은 선택적 Int 값입니다. 쉬운 쉬운! 우리는 프로토콜 식용을 정의하고 클래스 애플에서 구현했습니다. 이에 대한 프로토콜을 사용하는 것은 매우 간단합니다. 먼저 하나 이상의 메서드 요구 사항이 있는 프로토콜을 정의합니다. 이 경우 drawCustomComponents() 메서드를 호출하기 전에 몇 가지 기본 이미지를 설정하는 일반 ImageRenderer 프로토콜을 만들어 사용자 지정 작업을 수행합니다. 그런 다음 예제는 생일 Person이라는 새 Person 인스턴스를 만들고 이 새 인스턴스를 wishHappyBirthday(to:)에 전달합니다. 함수. Person는 두 프로토콜을 모두 준수하기 때문에 이 호출은 유효하며 wishHappyBirthday(to:) 함수는 생일 인사말을 인쇄 할 수 있습니다. 프로토콜과 확장의 우리의 영리한 사용 덕분에, 우리는 지금 스위프트의 번호 유형을 혼합하고 산술 계산을 수행하는 데 사용할 수 있습니다 : 폴 허드슨은 스위프트와 해킹의 창조자입니다, 스위프트의 가장 포괄적 인 시리즈. 그는 또한 스위프트 개발자 뉴스의 편집자, 스위프트 지식 기반의 메인테이너, 마리오 카트 세계 챔피언. 그래, 그래서 마지막 부분은 사실이 아니다. 궁금한 점은 여기에서 자세히 알아볼 수 있습니다.

비 – 클래스 형식이이 프로토콜을 준수하려고하면 컴파일러에 다음과 같은 오류가 표시됩니다. 다운캐스트 연산자의 버전은 프로토콜 형식의 선택적 값을 반환하며 인스턴스가 해당 프로토콜을 준수하지 않는 경우 이 값은 전무합니다. 이 예제에서는 특정 명명된 사람을 나타내는 Person라는 구조를 정의합니다. 그것은 그것의 정의의 첫 번째 줄의 일부로 완전 한 명명 된 프로토콜을 채택 상태. 고유한 프로토콜을 확장하는 것 외에도 Swift 표준 라이브러리에서 프로토콜을 확장할 수 있습니다. 예를 들어 큐 컬렉션의 평균 크기를 찾으려면 표준 컬렉션 프로토콜을 확장하여 큐를 확장할 수 있습니다. 그러나 가장 좋은 방법은 ViewController의 별도 확장에서 이를 그룹화하고 프로토콜을 구현하는 것입니다. 인터페이스가 있는 다른 프로그래밍 언어와 달리 Swift는 불필요한 제한으로 프로토콜을 제한하지 않습니다. Swift는 개발자가 필요에 따라 모호성을 해결할 수 있도록 하여 이러한 프로그래밍 언어의 일반적인 단점을 해결합니다. 해당 프로토콜의 요구 사항에 정의된 동작이 값 의미 체계가 아닌 참조 의미 체계를 가지고 있다고 가정하거나 요구하는 경우 클래스 전용 프로토콜을 사용합니다. 참조 및 값 의미 체계에 대한 자세한 내용은 구조 및 열거값이 값 유형이고 클래스는 참조 형식입니다.

프로토콜 블록 내에서 속성을 설명할 때 속성이 gettable {get } 또는 gettable 및 settable {get }만 인지 지정해야 합니다. 이 경우 변수 개수(Int 형식)만 gettable입니다. 앞에서 설명한 것처럼 프로토콜에도 메서드가 있을 수 있습니다. Circle 클래스는 저장된 반지름 속성을 기반으로 영역 속성 요구 사항을 계산된 속성으로 구현합니다. 국가 클래스는 저장된 속성으로 지역 요구 사항을 직접 구현합니다. 두 클래스 모두 HasArea 프로토콜을 올바르게 준수합니다. Queue 프로토콜을 한 번 더 살펴보겠습니다. 구조 또는 열거에 대한 Togglable 프로토콜을 구현하는 경우 해당 구조 또는 열거는 돌연변이로도 표시된 toggle() 메서드의 구현을 제공하여 프로토콜을 준수할 수 있습니다.