1
我創建了一個名爲JSBridge
類,這個類實現了WKNavigationDelegate
,我做了一些定製的東西,在協議的方法,然後調用另一個UIViewController
的默認WKNavigationDelegate
,例如WebViewController
又名webViewDelegate
,使我必須做這樣的SWIFT 3 WKWebView委託WKNavigationDelegate曖昧方法
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let webViewDelegate = webViewDelegate , self.webView == webView else {
decisionHandler(.allow)
return
}
//do something here then call `WebViewController`'s implementation
if webViewDelegate.responds(to: #selector(webViewDelegate.webView(_:decidePolicyFor:decisionHandler:))) {
webViewDelegate.webView!(webView, decidePolicyFor: navigationAction, decisionHandler: decisionHandler)
} else {
decisionHandler(.allow)
}
}
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
guard let webViewDelegate = webViewDelegate , self.webView == webView else {
decisionHandler(.allow)
return
}
//do something here then
if webViewDelegate.responds(to: #selector(webViewDelegate.webView(_:decidePolicyFor:decisionHandler:))) {
webViewDelegate.webView!(webView, decidePolicyFor: navigationResponse, decisionHandler: decisionHandler)
} else {
decisionHandler(.allow)
}
}
我的問題是在xcode8(swift3)編譯器給我的錯誤: Ambiguous use of 'webView(_:decidePolicyFor:decisionHandler:)'
,它們具有相同的名稱編譯器
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void)
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
它的工作原理!謝謝。 – Ethan