在WKWebView中,我们有一个方法evaluateJavaScript
。我已经覆盖了这个方法来添加自定义代码。
override open func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Swift.Void)? = nil)
{
let b:Bool? = true
let error: Error? = NSError(domain: "com.My.Tests", code: 1000, userInfo: nil) as Error
let completion = (b, error) -> Void
evaluateJavaScript(javaScriptString, completionHandler: completion)
}
如何通过完成?这是一个错误。
答案 0 :(得分:0)
这不是一个真正的关闭。
签名需要类似
的内容let completion = { (b, error) in print(b, error) }
声明的b
和error
变量无用,因为从方法返回b
和error
。
答案 1 :(得分:0)
override open func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Swift.Void)? = nil)
{
let b:Bool? = true
let error: Error? = NSError(domain: "com.My.Tests", code: 1000, userInfo: nil) as Error
evaluateJavaScript(javaScriptString) { (result, error) in
if error != nil {
completionHandler?(nil, error)
} else {
completionHandler?(result, nil)
}
}
}
答案 2 :(得分:0)
您的completion
不是关闭。它应该像
let completion = { (b: Any?, error: Error?) -> Void in
print("\(error)")
}
我假设你希望你的WKWebView
表现得像某些Javascript评估失败。如果是这种情况,您可以:
override func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Void)? = nil) {
evaluateJavaScript(javaScriptString) { b, error in
completionHandler?(true, NSError(domain: "com.My.Tests", code: 1000))
}
}
或者,如果你真的不需要评估Javascript,只是看起来就像失败一样(例如在测试中将其存在):
override func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Void)? = nil) {
completionHandler?(true, NSError(domain: "com.My.Tests", code: 1000))
}