0
UIButton
の拡張をいくつか作成しようとしていますので、カスタムボタンにプロトコルを追加するだけで簡単に機能を追加できます。私がUIButton
のいくつかのメソッドをオーバーライドする必要がなければ、もっと簡単になるでしょう。だから私はUIButton
の拡張をしなければならないと思っています。拡張UIButtonはプロトコルに準拠している場合のみ
// Only when the button conforms to protocol CustomLayer
extension UIButton {
override public class func layerClass() -> AnyClass { return CAShapeLayer.self }
}
// Only when the button conforms to protocol ButtonSound
extension UIButton {
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event)
AudioServicesPlaySystemSound(1104)
}
}
:これまでのところ、私は唯一の制約のない
UIButton
の拡張子(これらの簡略化されたバージョン)を作成するために管理
protocol CustomLayer { }
protocol ButtonSound { }
:
は例えば、私は私のカスタムボタンが準拠することができ、いくつかのプロトコルを持っています
私は記事を読んだ。クラスのwhere句を使ってプロトコル自体の拡張機能を作ることができる。
extension CustomLayer where Self: UIButton { }
しかし、UIButton
の方法をオーバーライドすることはできません。それは多重継承のための潜在的につながるようあなたが拡張子に制約を追加することはできません
class A: CustomLayer { } // Can't have ButtonSound, single subclass works
class B: ButtonSound { } // Can't have CustomLayer, single subclass works
class C: CustomLayer, ButtonSound { } // Error: multiple inheritance from classes
:サブクラス化作品が、特定のボタンのよう
その他の提案は、同じ機能を持つことができません – Paulw11
"button"にプロトコル準拠を追加するだけでは、それをいくつかの 'UIButton'サブクラスに追加することはできません。したがって、これらのサブクラスの拡張を行うだけです。 –
@ Paulw11:私はそれを恐れていました。この質問を作成する際に、複数の継承を持っていることに気付きました。私は質問を開いたままにしておきますが、他にもいくつかの提案が表示されるかもしれません。答えをありがとう。 –