Swift 3.0中的WKWebView Delegate(decisionPolicyFor)问题

时间:2016-09-05 09:36:02

标签: swift wkwebview

我目前正在我的应用程序中实现WKWebView,我想使用decisionPolicyFor委托方法来决定我的应用程序如何响应外部链接。

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {


    if navigationAction.navigationType == WKNavigationType.linkActivated && !(navigationAction.request.url?.host?.lowercased().hasPrefix("www.example.com"))! {
        UIApplication.shared.open(navigationAction.request.url!, options: [:], completionHandler:nil)
        decisionHandler(.allow)

    }
    else
    {
        decisionHandler(.cancel)
    }


}

但是编译器在swift 3.0中给出了以下问题: -

  

实例方法' webView(:decisionPolicyFor:decisionHandler:)'几乎匹配可选要求' webView(:decisionPolicyFor:decisionHandler :)'协议' WKNavigationDelegate'

是否有人知道解决方案,更重要的是为什么会这样?

提前致谢

1 个答案:

答案 0 :(得分:3)

如果您在Xcode中发现奇怪的内容,请检查the latest reference。 (有些引用可能不是最新的,但幸运的是,委托方法的描述似乎是最新的。)

  

<强>声明

optional func webView(_ webView: WKWebView, 
      decidePolicyFor navigationAction: WKNavigationAction, 
      decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)

@escaping之后添加decisionHandler:

func webView(_ webView: WKWebView,
             decidePolicyFor navigationAction: WKNavigationAction,
             decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {