Неоднозначная ссылка на инициализатор 'init (_ :)' при попытке разобрать Any?объект на строку в Swift - PullRequest
1 голос
/ 05 июля 2019

Я пытаюсь разобрать объект Any? в строку, содержащую HTML-документ, полученный из WKWebView после выполнения JS.

Если я пытаюсь напечатать объект Html: Any?, все отображается на консоли, но когда я пытаюсь сохранить его в переменной String для выполнения других операций, появляется ошибка

Неоднозначная ссылка на инициализатор '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 Ответ

1 голос
/ 05 июля 2019

Проблема в том, что ваш метод 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
}
...