尝试解析 An 时对初始值设定项 'init(_:)' 的引用不明确? Swift 中的字符串对象
Ambigous reference to initializer 'init(_:)' when trying to parse Any? object to String in Swift
我正在尝试将 Any?
对象解析为字符串,其中包含来自 WKWebView
JS 执行后的 HTML 文档。
如果我尝试打印 Html: Any?
对象,所有内容都显示在控制台上,但是当我尝试将它存储在 String var 中以用它做其他事情时,出现错误
Ambigous reference to initializer 'init(_:)'
这是我的代码:
func getHTML() {
miWEBVIEW.evaluateJavaScript("document.documentElement.outerHTML.toString()", completionHandler: { (html: Any?, error: Error?) in
print(html) // -> This works showing HTML on Console, but need in String to manipulate
return html
})
}
这里是我在按钮事件中调用函数的地方:
let document: Any? = getHTML()
var documentString = String(document) // -> error appears in this line
问题是您的 getTML 方法 returns 无效。您不能用它初始化 String 对象。除此之外 WKWebView evaluateJavaScript
是一个异步方法。您需要向 getHTML 方法添加完成处理程序:
func getHTML(completion: @escaping (_ html: Any?, _ error: Error?) -> ()) {
webView.evaluateJavaScript("document.documentElement.outerHTML.toString()",
completionHandler: completion)
}
然后您需要像这样调用您的 getHTML 方法:
getHTML { html, error in
guard let html = html as? String, error == nil else { return }
self.doWhatever(with: html)
}
func doWhatever(with html: String) {
print(html)
// put your code here
}
我正在尝试将 Any?
对象解析为字符串,其中包含来自 WKWebView
JS 执行后的 HTML 文档。
如果我尝试打印 Html: Any?
对象,所有内容都显示在控制台上,但是当我尝试将它存储在 String var 中以用它做其他事情时,出现错误
Ambigous reference to initializer 'init(_:)'
这是我的代码:
func getHTML() {
miWEBVIEW.evaluateJavaScript("document.documentElement.outerHTML.toString()", completionHandler: { (html: Any?, error: Error?) in
print(html) // -> This works showing HTML on Console, but need in String to manipulate
return html
})
}
这里是我在按钮事件中调用函数的地方:
let document: Any? = getHTML()
var documentString = String(document) // -> error appears in this line
问题是您的 getTML 方法 returns 无效。您不能用它初始化 String 对象。除此之外 WKWebView evaluateJavaScript
是一个异步方法。您需要向 getHTML 方法添加完成处理程序:
func getHTML(completion: @escaping (_ html: Any?, _ error: Error?) -> ()) {
webView.evaluateJavaScript("document.documentElement.outerHTML.toString()",
completionHandler: completion)
}
然后您需要像这样调用您的 getHTML 方法:
getHTML { html, error in
guard let html = html as? String, error == nil else { return }
self.doWhatever(with: html)
}
func doWhatever(with html: String) {
print(html)
// put your code here
}