확장에 대한 스위프트의 정적 특성 프로토콜

실험 샘플 코드

//声明一个协议
protocol SharedString {
    func methodForOverride() -> Void
    func methodWithoutOverride() -> Void
}

//扩展协议,实现默认实现
//注意方法methodWithoutOverride 中调用了 methodForOverride 方法,这里有一个上写文切换的问题
extension SharedString {
    func methodForOverride() -> Void {
        print("��")
    }

    func methodWithoutOverride() -> Void {
        print("��")
        methodForOverride()
        print("��")
    }
}

//在String类的扩展中遵守并实现协议
extension String:SharedString {
    func methodForOverride() -> Void {
        print(self)
    }
}

//创建字符串并切换上下文到SharedString协议
let Shared:SharedString = "hello"

Shared.methodForOverride()
Shared.methodWithoutOverride()

수득 다른 부호 변환의 실행은 요약

사건 번호 계약 문 방법 기본 구현에서 프로토콜 확장 프로토콜 수준의 재 작성에 따라 실험 프로토콜의 특성에 따라 (스위치 컨텍스트) 메소드 실행 방법의 결과
1 아니 아니 오버라이드 (override) 프로토콜 수준의 방법에 따라
오버라이드 (override) 프로토콜 수준의 방법에 따라
아니 오버라이드 (override) 프로토콜 수준의 방법에 따라
4 아니 아니 아니 오버라이드 (override) 프로토콜 수준의 방법에 따라
5 아니 오버라이드 (override) 프로토콜 수준의 방법에 따라
6 아니 아니 기본 확장 프로토콜 구현
(7) 아니 아니 아니 기본 확장 프로토콜 구현
8 아니 기본 확장 프로토콜 구현
9 아니 아니 기본 확장 프로토콜 구현
(10) 아니 기본 확장 프로토콜 구현
(11) 아니 아니 도 1 및도 2는 프로토콜을 확장하는 방법이다. , 메소드 호출을 따라 클래스에서 재정의하는 방법은 방법은 프로토콜 클래스는 다시 작성 다음과 같습니다. 방법 2 다시 작성되지 않지만, 호출 방법 1 방법 2는 계약이라고 Tier 2 방법,이 시간에 아직 기본 프로토콜의 확장을 달성하기 위해
(12) 아니 아니 오류
(13) 아니 아니 아니 오류
(14) 아니 아니 아니 아니 오류
(15) 아니 아니 아니 오류
(16) 아니 아니 목표 전환

기존 방법의 정적 특성을 유지하기 위해 상기 프로토콜 정보에 정의 된 프로토콜 정보를 재 기입하는 방법이 카트리지의 버전을 재기록하면 불변성을 보장 할 수있는 방법을 재기록하지 않으면 서, 문맥 전환하여 다른 버전을 획득 할 수있다.

우리는 그렇지 않은 사람들 정의 및 프로토콜 확장에 복제 메소드를 구현하고자하는 계약에 정의 방법 오버라이드 (override) 할 수 원하는 사람들에게 원칙을 따를 수 있습니다.

게시 된 139 개 원래 기사 · 원의 찬양 (35) · 전망 (410) 000 +

추천

출처blog.csdn.net/wxs0124/article/details/73742465