스위프트의 프로토콜 지향 프로그래밍과 확장 기능의 작동 방식 및 제공 할 수있는 확장 성 수준.스위프트 프로토콜 지향 확장
Extension - doSomethingA Self: ProtocolB, ProtocolC
내가 실행하는 모든 확장을 보장 할 수 있다는 것을 어쨌든 거기 :
내가 내가 인쇄되는 것은 놀이터
protocol ProtocolA {
func doSomethingA()
}
protocol ProtocolB {
func doSomethingB()
}
protocol ProtocolC {
func doSomethingC()
}
extension ProtocolA {
func doSomethingA() {
print("Extension - doSomethingA")
}
}
extension ProtocolA where Self: ProtocolB {
func doSomethingA() {
print("Extension - doSomethingA Self: ProtocolB")
}
}
extension ProtocolA where Self: ProtocolC {
func doSomethingA() {
print("Extension - doSomethingA Self: ProtocolC")
}
}
extension ProtocolA where Self: ProtocolB, Self: ProtocolC {
func doSomethingA() {
print("Extension - doSomethingA Self: ProtocolB, ProtocolC")
}
}
extension ProtocolB {
func doSomethingB() {
print("Extension - doSomethingB")
}
}
extension ProtocolC {
func doSomethingC() {
print("Extension - doSomethingC")
}
}
class Implementation: ProtocolA, ProtocolB, ProtocolC {
}
let obj = Implementation()
obj.doSomethingA()
을 통해 실행 한 다음 코드 되세요.
이상적인 결과는 다음과 같습니다. 내가 ProtocolA이 ProtocolB 및 ProtocolC 모두 일치하는 구현을 제공하지 않으면 내가 스위프트는, 그것의 측면에서 가장 강한 일치를 선택할 것이라는 점을 이해한다
Extension - doSomethingA
Extension - doSomethingA Self: ProtocolB
Extension - doSomethingA Self: ProtocolC
Extension - doSomethingA Self: ProtocolB, ProtocolC
사실, 유형, 난 컴파일 타임 오류가 발생합니다. 이 문제를 해결할 수있는 방법이 있습니까?
감사합니다.
원하는 모든 작업 *** ***? – Fattie
@JoeBlow 맞아. – Peymankh
의미합니까? 코드에 이것을 입력하면 :'obj.doSomethingA()'는 네 개의 다른 루틴을 * 실행하려고합니다. 그래서, 당신이 상속의 사슬에서 "슈퍼 ...."네 번 4 번, 잘 세 번 전화했는지? – Fattie