Swift 覆盖子 类 中的协议方法
Swift override protocol methods in sub classes
我有一个基础 class,它实现了一个符合如下协议的扩展:
protocol OptionsDelegate {
func handleSortAndFilter(opt: Options)
}
extension BaseViewController: OptionsDelegate {
func handleSortAndFilter(opt: Options) {
print("Base class implementation")
}
}
我有一个继承自 BaseViewController 的子class "InspirationsViewController"。我正在重写扩展中的协议方法,如下所示:
extension InspirationsViewController {
override func handleSortAndFilter(opt: Options) {
print("Inside inspirations")
}
}
当我覆盖子class扩展中的"handleSortAndFilter"函数时出现错误:"Declerations in extensions cannot override yet"
但是当我实现 UITableView 数据源和委托方法时,我没有看到类似的问题。
如何避免这个错误?
据我所知,您不能覆盖扩展中的方法。扩展程序只能执行以下操作:
“Swift 中的扩展可以:
- 添加计算实例属性和计算类型属性
- 定义实例方法和类型方法
- 提供新的初始值设定项
- 定义下标
- 定义和使用新的嵌套类型
- 使现有类型符合协议”
摘自:Apple Inc.“Swift 编程语言 (Swift 3.0.1)。”
在 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")
}
}
我有一个基础 class,它实现了一个符合如下协议的扩展:
protocol OptionsDelegate {
func handleSortAndFilter(opt: Options)
}
extension BaseViewController: OptionsDelegate {
func handleSortAndFilter(opt: Options) {
print("Base class implementation")
}
}
我有一个继承自 BaseViewController 的子class "InspirationsViewController"。我正在重写扩展中的协议方法,如下所示:
extension InspirationsViewController {
override func handleSortAndFilter(opt: Options) {
print("Inside inspirations")
}
}
当我覆盖子class扩展中的"handleSortAndFilter"函数时出现错误:"Declerations in extensions cannot override yet"
但是当我实现 UITableView 数据源和委托方法时,我没有看到类似的问题。
如何避免这个错误?
据我所知,您不能覆盖扩展中的方法。扩展程序只能执行以下操作: “Swift 中的扩展可以:
- 添加计算实例属性和计算类型属性
- 定义实例方法和类型方法
- 提供新的初始值设定项
- 定义下标
- 定义和使用新的嵌套类型
- 使现有类型符合协议”
摘自:Apple Inc.“Swift 编程语言 (Swift 3.0.1)。”
在 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")
}
}