在swift中覆盖函数错误

我有一个结构:

struct ErrorResultType: ErrorType { var description: String var code: Int } 

和协议:

 protocol XProtocol { func dealError(error: ErrorResultType) } 

现在我想扩展UIViewController:

 extension UIViewController: XProtocol { func dealError(error: ErrorResultType) { // do something } } 

所以我可以从这个子类重写像这样的function:

 class ABCViewController: UIViewController { --->override func dealError(error: ErrorResultType) { super.dealError(error) // do something custom } } 

但它出错了: Declarations from extensions cannot be overridden yet

这对我没有任何意义。 当我用AnyObjectreplace所有ErrorResultType时,错误不会再出现。

我错过了什么?

现在,扩展中的方法必须用@objc标记,以允许在子类中覆盖它。

 extension UIViewController: XProtocol { @objc func dealError(error: ErrorResultType) { // do something } } 

但是这要求方法签名中的所有types都与Objective-C兼容,而ErrorResultType不是。 但是,使你的ErrorResultType类而不是结构应该可以工作。

如果我没有犯错,这与Swift正式的扩展机制有关,用于向类添加方法。

结论:

目前,不可能通过子类来覆盖扩展中声明的实体,如下所示:

 class Base { } extension Base { var foo: String { return "foo" } } class Sub: Base { override var foo: String { return "FOO" } // This is an error } 

请查看以下资源以获取更多信息: https : //github.com/ksm/SwiftInFlux/blob/master/README.md#overriding-declarations-from-extensions