Swift WKWebView createWebArchiveData запутался в типе возврата

#wkwebview #createwebarchivedata

Вопрос:

Я пытаюсь захватить содержимое, отображаемое в веб-представлении (не источник, представляющий собой набор javascripts). Я надеюсь, что createWebArchiveData wkwebview — правильный метод.

Итак, где я запутываюсь, так это в том, что возвращается после звонка.

 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    
    webView.createWebArchiveData(completionHandler: { (result) in
        
    })
 

в документах говорится, что результатом является результат<данные, ошибка>. Я набрал на нем тип(из:), и в журнале был напечатан результат<данные, ошибка>…спасибо, Эппл…

когда я напечатал результат, я получил:

 success(5990802 bytes)
 

подумал, может быть, это кортеж, но результат.0 выдал ошибку…

 Value of type 'Result<Data, Error>' has no member '0'
 

попытался преобразовать данные в строку…это не сработало…

попытался его разархивировать, но тоже не получилось.

 Cannot convert value of type 'Result<Data, Error>' to expected argument type 'Data
 

так что буду признателен за любую помощь. Мне нужно то, что отображается на экране, а не исходный код (на случай, если я ошибаюсь в этом).

Ответ №1:

Я решил эту проблему. Результирующий объект представляет собой перечисление с двумя случаями успеха и неудачи. Вы бы прочитали значение (в данном случае, потому что это данные) примерно так:

 webView.createWebArchiveData(completionHandler: { (result) in
        
        //var strResult = String(utf8String: result)
        switch result {
        case .success(let data):
            let str = String(decoding: data, as: UTF8.self)
            print(str)
            
        case .failure(let error):
            print(error)
        }
    })