首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在swift中实现系统协议可选要求的通用实现最简单的方法是什么?

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

Stack Overflow用户
提问于 2020-07-17 14:48:36
回答 1查看 64关注 0票数 0

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

代码语言:javascript
复制
public protocol WKNavigationDelegate : NSObjectProtocol {

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

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

代码语言:javascript
复制
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中实现,就像我们对自定义协议一样。

代码语言:javascript
复制
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
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 14:53:58

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

代码语言:javascript
复制
extension UIViewController : WKNavigationDelegate  {

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

并在子类中重写它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62948581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档