我正在编写一个可重用的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
}
}
答案 0 :(得分:1)
您可以简单地使用超级实现,并使用逻辑或or组合两者,具体取决于您希望实现的目标:
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
。)