Java/C++のような言語から来ており、私たちは部分クラスまたは抽象クラスの実装に慣れています。Swift:プロトコル(インターフェイス)の部分クラス実装を行う方法?
protocol ProtocolA {
func x()
func y()
}
// attempt to partially implement ProtocolA
class AbstractProtocolA: ProtocolA {
func x() { /* implementation */ }
// does not implement function y
}
class ConcreteA1: AbstractProtocolA {
func y() { /* implementation */ }
}
class ConcreteA2: AbstractProtocolA {
override func x() { /* implementation */ }
func y() { /* implementation */ }
}
が、これはスウィフトでは不可能であり、この場合には、私はコンパイルエラーType 'AbstractProtocolA' does not conform to protocol 'ProtocolA'
になるだろう...このOODのユースケースをカバーするために、別のSwiftyの方法は何ですか?
UPDATE: この制限を回避する方法はには次のようになります。
enum ProtocolAError: ErrorType {
case NotImplementedException(methodName: String)
}
class AbstractProtocolA: ProtocolA {
func x() { /* implementation */ }
func y() { throw ProtocolAError.NotImplementedException(methodName: "y") }
}
が、ここでは、実行時ではなく、時間をコンパイルする(すなわち、抽象AbstractProtocolAをインスタンス化)設計/プログラミングミスをシフトします。
エクステンションを見ましたか? – Wain
'optional'キーワードを見ましたか? – ZeMoon
いいえ、私は見ていない...答えを書くことは怠惰ではない:D –