下面是系统协议和可选要求。
public protocol WKNavigationDelegate : NSObjectProtocol {
@available(iOS 8.0, *)
optional func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
}假设有多个ViewControllers需要实现此协议。
class ViewController1: UIViewController, WKNavigationDelegate { } // default
class ViewController2: UIViewController, WKNavigationDelegate { } // default
class ViewController3: UIViewController, WKNavigationDelegate {
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
print("Override Success!")
}
}有没有办法可以为这个协议提供一个默认的实现,如果它没有在ViewControllers中实现,就像我们对自定义协议一样。
extension WKNavigationDelegate {
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
print("Success!") // default implementation doesn't seem to work for system protocol
}
}发布于 2020-07-17 14:53:58
您可以使用缺省实现扩展基类UIViewController并使其符合系统协议WKNavigationDelegate
extension UIViewController : WKNavigationDelegate {
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
print("Success!")
}
}并在子类中重写它
https://stackoverflow.com/questions/62948581
复制相似问题