在swift中,使系统协议的通用实现成为可选要求的最简单方法是什么



以下是系统协议和可选要求。

public protocol WKNavigationDelegate : NSObjectProtocol {
@available(iOS 8.0, *)
optional func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
}

假设有多个ViewController需要实现此协议。

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

您可以扩展基类UIViewController,并使用默认实现使其符合系统协议WKNavigationDelegate

extension UIViewController : WKNavigationDelegate  {
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
print("Success!")
}
}

并在子类中覆盖它

最新更新