扩展中的声明不能覆盖Swift 4中的错误

我有一个扩展名:

public extension UIWindow { override public func topMostController()->UIViewController? { ... } } 

但对于我topMostController我得到下一个错误:

 Declarations in extensions cannot override yet error 

它适用于Swift 3.1,但对于Swift 4,我得到这个错误。 如何解决? 他们在Swift 4中改变了什么?

它会工作,如果你使基地实施@objc

扩展可以向types添加新的function,但是它们不能覆盖现有的function。

扩展为现有的类,结构,枚举或协议types添加新的function。 这包括扩展您无法访问原始源代码的types(称为追溯build模)。

Swift中的扩展可以:

  • 添加计算的实例属性和计算的types属性
  • 定义实例方法和types方法
  • 提供新的初始化程序
  • 定义下标
  • 定义和使用新的嵌套types
  • 使现有types符合协议

苹果开发者指南

你正试图做的是类似于这个代码所做的:

 class MyClass: UIWindow { func myFunc() {} } extension MyClass { override func myFunc() {} } 

注意:如果你想override topMostController()然后创buildUIWindow子类