スイフトのプロトコル指向プログラミングと、エクステンションの仕組みと、それが提供できる拡張性のレベル。スイフトプロトコル指向エクステンション
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
は、実際には、種類のだ、私は、コンパイル時にエラーになるだろう。とにかく私はこれを回ることができるのですか?
ありがとうございました。
あなたはそれをしたい***すべての3 *** ??? – Fattie
@JoeBlowそうです。 – Peymankh
あなたはそれを意味しますか?これをコードに入力すると、 'obj.doSomethingA()'は実際には4つの異なるルーチン*を実行するようにします。だから、あなたが "super ...."と呼んだかのように、4回、よく3回、継承の連鎖で? – Fattie