尝试解析任何对初始值设定项'init(_ :)'的模糊引用吗? Swift中的String对象

时间:2019-07-05 14:29:38

标签: swift html-parsing wkwebview

我正在尝试将Any?对象解析为String,该对象包含一个来自JS执行后WKWebView的HTML文档。

如果我尝试打印Html: Any?对象,所有内容都将显示在控制台上,但是当我尝试将其存储在String var中以对其进行其他处理时,会出现错误

  

对初始化程序'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

1 个答案:

答案 0 :(得分:1)

问题是您的getTML方法返回Void。您不能使用它初始化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
}