Swift UIWebView 委托使用和覆盖 shouldStartLoadWith
Swift UIWebView Delegate use and override shouldStartLoadWith
我正在编写一个可重用的 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
}
然后在我的 child class 中,我想执行以下操作,但我想同时使用两者 functions.How 我可以这样做吗?
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
}
}
您可以简单地使用 super 实现并使用逻辑或或与将两者结合起来,具体取决于您想要实现的目标:
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([=11=]) })
}
请注意,由于短路评估,只有在 superWantsToLoad
为假时才会评估 string.contains()
调用。
如果您要处理许多字符串,这可能很重要。 (或者,您可以提前插入 return true
。)
我正在编写一个可重用的 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
}
然后在我的 child class 中,我想执行以下操作,但我想同时使用两者 functions.How 我可以这样做吗?
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
}
}
您可以简单地使用 super 实现并使用逻辑或或与将两者结合起来,具体取决于您想要实现的目标:
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([=11=]) })
}
请注意,由于短路评估,只有在 superWantsToLoad
为假时才会评估 string.contains()
调用。
如果您要处理许多字符串,这可能很重要。 (或者,您可以提前插入 return true
。)