2017-03-16 23 views
0

재사용 가능한 UIWebView 컨트롤러를 작성 중이며 delegate shouldStartLoadWith 함수를 사용하는 동안 그 컨트롤러를 상속 받고이를 재정의하려고하지만 어떻게해야할지 모르겠습니다.Swift UIWebView 대리자 shouldStartLoadWith 사용 및 재정의

제 재사용 인 UiWebView 컨트롤러에는이 기능이 있습니다.

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

    let docURLStr = request.mainDocumentURL!.absoluteString 

    if docURLStr.contains("login") { 
     loadLoginView() 
     return false 
    } 

다음으로 내 자녀 수업에서 나는 다음 두 가지를하고 싶지만 두 가지 기능을 모두 사용하고 싶습니다. 어떻게 할 수 있습니까?

override func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

let docUrl = request.url!.absoluteString 

if String(describing: docUrl).range(of: "some string in the url") != nil{ 
    return true 
    } else { 
     return false 
     } 
} 

답변

1

당신은 단순히 슈퍼 구현을 사용하고 당신이 달성하려는 작업에 따라, 논리적 또는 또는과를 사용하여 두 가지를 결합 할 수 있습니다 :

override func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool 
{ 
    let docUrl = request.url!.absoluteString 
    let load = String(describing: docUrl).range(of: "some string in the url") != nil 
    return load || super.webView(webView, shouldStartLoadWith: request, navigationType: navigationType) 
} 

은 당신이 좋아하는 일을 할 수있는 몇 가지 문자열을 확인하려면 이 :

override func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool 
{ 
    let docUrl = request.url!.absoluteString 
    let superWantsToLoad = super.webView(webView, shouldStartLoadWith: request, navigationType: navigationType) 
    let strings = ["foo", "bar"] 
    return superWantsToLoad || strings.contains(where: { docUrl.contains($0) }) 
} 

string.contains() 전화는 superWantsToLoad는 단락 회로 평가에 거짓 덕분 경우 평가됩니다 유의하시기 바랍니다. 처리 할 문자열이 많은 경우 중요 할 수 있습니다. (또는 return true 초기에 삽입 할 수 있습니다.)

+0

많은 수의 문자열을 테스트 할 수있는 자식보다 우선적으로 사용해야합니다. 특히로드 된 웹보기에서 로그인 링크를 확인해야합니다. – markhorrocks

+0

슈퍼가 우선하게하려면'return super.webView (...) || 로드? – thm

+0

좋아, 많은 문자열 테스트를 위해 var로로드를 생성 한 다음 제안대로 할 수 있습니까? – markhorrocks