Ios swift中的覆盖函数错误
我得到了一个结构:Ios swift中的覆盖函数错误,ios,swift,protocols,Ios,Swift,Protocols,我得到了一个结构: struct ErrorResultType: ErrorType { var description: String var code: Int } 和一项议定书: protocol XProtocol { func dealError(error: ErrorResultType) } 现在我想对UIViewController进行扩展: extension UIViewController: XProtocol { func dea
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
}
}
因此,我可以从中创建子类并重写函数,如:
class ABCViewController: UIViewController {
--->override func dealError(error: ErrorResultType) {
super.dealError(error)
// do something custom
}
}
但它的错误在于:来自扩展的声明还不能被覆盖
这对我来说毫无意义。当我将所有ErrorResultType
替换为AnyObject
时,错误将不再出现
我遗漏了什么吗?如果我没有犯错误,这与向类添加方法的Swift官方扩展机制有关 结论: 目前,无法覆盖在中声明的实体 通过子类化进行扩展,如下所示:
请查看此资源以了解更多信息:目前,扩展中的方法必须标记为
@objc
,以允许在子类中重写它
extension UIViewController: XProtocol {
@objc
func dealError(error: ErrorResultType) {
// do something
}
}
但这要求方法签名中的所有类型都与Objective-C兼容,而您的ErrorResultType
则不兼容。
不过,将您的
ErrorResultType
设置为类而不是结构应该是可行的 是的,如果我将扩展更改为一个新类,它会做一些工作。我重写了子类中的函数,错误消失了。但我还是很困惑。为什么使用AnyObject
不会导致这个问题。最重要的是,我想在UIViewController中添加一个基函数,而不使用UIViewControlleries中的子类~它可以工作!这就是为什么可以使用AnyObject
。ErrorResultType
的类也必须是NSObject
的子类,ErrorType
是swift类/协议。很遗憾,我不能使用struct,struct比class更合适。
extension UIViewController: XProtocol {
@objc
func dealError(error: ErrorResultType) {
// do something
}
}