Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift中的覆盖函数错误_Ios_Swift_Protocols - Fatal编程技术网

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
    }
}