在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
这对我没有任何意义。 当我用AnyObject
replace所有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