swift protocol 예제

위의 두 규칙이 메서드 호출을 완전히 모호하게 하지 않으면 Swift는 코드 컴파일을 거부합니다. 개체 배열은 이제 반복 할 수 있으며 배열의 각 개체는 HasArea 프로토콜을 준수하는지 확인할 수 있습니다 : 프로토콜이 많은 장점을 제공하고 중간에서 큰 Swift 프로젝트에서 거의 중요한 요소라는 데 동의하지만 개인적으로는 더 쉽게 찾을 수 있습니다. o 막 시작했을 때 구체적인 유형에 대해 생각해 보십시오. 그런 다음 더 많은 작업을 수행하거나 기능을 공유하기 위해 확장해야하는 경우 프로토콜을 만들고 프로토콜 확장을 통해 기능을 이동합니다. 그러나 필요할 때만 그렇게합니다 – 향후 공유 기능에 필요한 프로토콜의 종류를 미리 예측하려고하지 않습니다. 클래스, 구조 및 열거형은 두 개 이상의 프로토콜을 준수할 수 있기 때문에 여러 프로토콜의 기본 구현을 취할 수 있습니다. 이는 개념적으로 다른 언어의 여러 상속과 유사합니다. 예를 들어 오류를 나타내는 모든 개체는 오류(또는 지역화된 설명을 제공하려는 경우 LocalizedError) 프로토콜을 준수할 수 있습니다. is 연산자는 인스턴스가 프로토콜 표준을 준수하고 실패할 경우 false를 반환하는 경우 true를 반환합니다.

더 좋은 점은 Swift를 클래스 및 하위 형식 실존에 대해 동일한 구문을 사용할 수 있게 해 주므로 프로토콜을 클래스와 결합하여 우리가 받아들이는 것에 대해 훨씬 더 정확하게 할 수 있습니다. makeSmoothie 메서드는 혼합 가능한 프로토콜을 준수하는 클래스의 배열을 수락한 다음 for 루프를 사용하여 각 클래스의 blend 메서드에 액세스합니다. Blendable 프로토콜을 준수하지 않는 클래스가 배열로 전달되면 응용 프로그램이 오류를 throw합니다. 마찬가지로, SnakesAndLadders 게임 클래스는 텍스트 표현 가능한 프로토콜을 채택하고 준수하도록 확장 할 수 있습니다 : 위의 프로토콜은 단순히 나를 채택하고자하는 클래스 / 구조 / 열거식은 문자열의 유형이어야하는 fullName이라는 속성이 있어야한다고 말합니다. 속성은 {get }로 표시된 gettable 속성이어야 합니다. 프로토콜 확장은 준수 형식에 구현을 추가할 수 있지만 프로토콜을 다른 프로토콜에서 확장하거나 상속할 수는 없습니다. 프로토콜 상속은 항상 프로토콜 선언 자체에 지정됩니다. 프로토콜은 특정 이름과 형식을 사용하여 인스턴스 속성 또는 형식 속성을 제공하기 위해 모든 준수 형식을 요구할 수 있습니다.

프로토콜은 속성이 저장된 속성인지 계산된 속성이어야 하는지 여부를 지정하지 않으며 필수 속성 이름 및 형식만 지정합니다. 또한 이 프로토콜은 각 속성을 gettable 또는 gettable 및 settable이어야 하는지 여부를 지정합니다. 프로토콜은 형식으로 프로토콜에 언급 된 대로 배열 또는 사전 과 같은 컬렉션에 저장 되는 유형으로 사용할 수 있습니다. 이 예제에서는 TextRepresentable 사물의 배열을 만듭니다. 프로토콜을 사용하여 코드에 실제로 무엇이 있는지 에 대한 추상화를 추가할 수 있습니다. 이제 프로토콜이 무엇이고 어떤 프로토콜이 수행하는지 알아보았으니 실제로 프로토콜을 사용하는 방법을 살펴보겠습니다. 경우에 따라 프로토콜이 하위 클래스를 대체할 수 있는 방법에 대해 배웠지만 다른 용도인 추상화를 살펴보겠습니다. 프로토콜을 사용하면 다른 형식이 준수할 수 있는 기능의 청사진을 정의할 수 있으므로 해당 기능을 창의적으로 사용하여 형식 정보를 추상화하면 어떻게 되는지 살펴보겠습니다. 우리는 이미 사운드 프로토콜의 사용을 통해 예제의 다소를 보았다. 우리는 심지어 나무와 아이폰이 동물처럼 행동 할 수있는 기능을 추가! 인터페이스가 있는 다른 프로그래밍 언어와 달리 Swift는 불필요한 제한으로 프로토콜을 제한하지 않습니다. Swift는 개발자가 필요에 따라 모호성을 해결할 수 있도록 하여 이러한 프로그래밍 언어의 일반적인 단점을 해결합니다. 플로트, 더블, Int 및 UInt는 모두 평균 판독값에 숫자입니다.

    Outros serviços