以下のプロトコルに準拠する拡張機能を実装する基本クラスがあります。
protocol OptionsDelegate {
func handleSortAndFilter(opt: Options)
}
extension BaseViewController: OptionsDelegate {
func handleSortAndFilter(opt: Options) {
print("Base class implementation")
}
}
BaseViewControllerから継承するサブクラス「InspirationsViewController」を持っています。そして、私は拡張機能のプロトコルメソッドを以下のようにオーバーライドしています:
extension InspirationsViewController {
override func handleSortAndFilter(opt: Options) {
print("Inside inspirations")
}
}
サブクラス拡張の "handleSortAndFilter"関数をオーバーライドするとエラーが発生します: "拡張のデクレレーションはまだオーバーライドできません"
しかし、UITableViewデータソースとデリゲートメソッドを実装しても、同様の問題は発生しません。
このエラーを回避する方法は?
Where句でプロトコル拡張を使用します。できます。
class BaseViewController: UIViewController {
}
extension OptionsDelegate where Self: BaseViewController {
func handleSortAndFilter(opt: Options) {
print("Base class implementation")
}
}
extension BaseViewController: OptionsDelegate {
}
class InsipartionsViewController: BaseViewController {
}
extension OptionsDelegate where Self: InsipartionsViewController {
func handleSortAndFilter(opt: Options) {
print("Inspirations class implementation")
}
}
私の知る限り、拡張機能のメソッドをオーバーライドすることはできません。拡張機能でできることは次のとおりです。「Swift
抜粋:Apple Inc.「Swiftプログラミング言語(Swift 3.0.1)。」