【问题标题】:Can I override a Swift method that has been overridden by an extension?我可以覆盖已被扩展覆盖的 Swift 方法吗?
【发布时间】:2020-12-18 07:08:51
【问题描述】:

我正在尝试创建一个扩展来调试一个类,以便在您输入某些方法时打印一些输出。我希望能够在许多不同的类中重用此代码,并且我希望使这些类不受此调试代码的影响,同时也不重复代码(保持 DRY)。这就是为什么我想使用这样的扩展:

class A: ... {
    override func myMethod() { 
        super.myMethod()
        print("hello A")
    }
}

extension A {
    override func myMethod() { 
        print("hello extension")
    }
}

我希望在调用 myMethod() 时看到这个

hello extension
hello A

(或者反过来,我不在乎)

但问题是编译器说的是"myMethod() has already been overridden here"

有什么想法吗?

【问题讨论】:

  • 类的主体和扩展不能同时提供覆盖。编译器将如何决定选择哪个?
  • 好吧,也许扩展程序可以调用self.myMethod() 而不是super.myMethod() 或类似的东西。或者扩展的超级意味着类......无论如何。任何想法如何做到这一点?
  • 您还应该提供重用它的方式...

标签: swift


【解决方案1】:

扩展可以为类型添加新功能,但不能 覆盖现有功能。

答案在这里Swift override function in extension

【讨论】:

    猜你喜欢
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多