2016-09-05 8 views
0

私は現在、自分のアプリケーションにWKWebViewを実装しています。私のアプリケーションが外部リンクにどのように応答するかを決めるために、decidePolicyFor委譲メソッドを使いたいと思います。 Swift 3.0のWKWebView代理人(decidePolicyFor)の問題

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(:decidePolicyForは:decisionHandlerは:)' ほぼ一致し、オプションの要件「のWebView(:decidePolicyFor :decisionHandler :)」プロトコルの 『WKNavigationDelegate』

は、誰もがこの解決策を知っていますし、もっと重要なのは、なぜこれが

起こっています

ありがとうございます。

答えて

2

Xcodeで奇妙なことが見つかった場合は、the latest referenceを確認してください。 (参考文献の一部が最新ではないかもしれないが、幸いにも、デリゲートメソッドの記述が最新のようです。)

宣言

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

の後に@escapingを追加します。

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

ありがとう、閉鎖パラメータ。時には最も明白なものはあまり明らかではありません。 – Tom

関連する問題