mostrar contenido de HTML en TextView de manera eficiente

Estoy usando esta manera y funciona bien, pero tiene una lentitud alternativa debido al uso de NSHTMLTextDocumentType como hice con mi investigación

do { let attributedOptions:[String: Any] = [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue] let date = html.data(using: String.Encoding.utf8, allowLossyConversion: true)! return try NSAttributedString(data: data, options: attributedOptions , documentAttributes: nil) } catch let error as NSError { print("htmo2String \(error)") } 

cualquier idea de cómo hacerlo más rápido u otra manera eficiente de hacerlo!

Tal vez pueda ejecutar el código de análisis en una queue …

 func parse(_ html: String, completionHandler: @escaping (_ attributedText: NSAttributedString?) -> (Void)) -> Void { let htmlData = text.data(using: String.Encoding.utf8, allowLossyConversion: false) let options: [String: AnyObject] = [ NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType as AnyObject ] completionHandler(try? NSAttributedString(data: htmlData!, options: options, documentAttributes: nil)) } 

Y ahora llama a la function y espera de respuesta …

 let queue: DispatchQueue = DispatchQueue(label: "com.yourcompany.Process./html_converter") queue.async { parse("<p>¡Hola mundo</p>", completionHandler: { (attributtedString: NSAttributedString?) -> (Void) in if let attributtedString = attributtedString { DispatchQueue.main.async { print("str:: \(attributtedString)") } } }) } 

¿Intentó usar una UIWebView para presentar el contenido HTML?

Puede mostrar HTML de una cadena o de una URL, como prefiera.

Aquí hay un ejemplo para mostrar HTML de una cadena:

 string sHTMLContent = "<html><head><body><p>Hello World</p></body></head></html>"; m_WebView.LoadHtmlString(sHTMLContent , null); 

Luego puede configurar el tamaño de su Webview para que sea igual a su vista de text con restricciones. La vista web se puede desplazar automáticamente si es necesario.

Extensión de cadena final para mostrar html de manera eficiente con @Adolfo idea asincrónica

con la capacidad de cambiar la fuente y el color ^ _ ^

 extension String { func html2StringAsync(_ fontSize: CGFloat? = nil, color: UIColor? = nil, completionBlock:@escaping (NSAttributedString) ->()) { let fontSize = fontSize ?? 10 let fontColor = color ?? UIColor.black let font = "Avenir !important" let html = "<div style=\"font-family:\(font); font-size:\(fontSize)pt; color:\(fontColor.hexString);\">" + self + "</div>" if let data = html.data(using: String.Encoding.utf8, allowLossyConversion: true){ DispatchQueue.main.async { do { let attributedOptions:[String: Any] = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue] let attrStr = try NSAttributedString(data: data, options: attributedOptions , documentAttributes: nil) completionBlock(attrStr) } catch let error as NSError { print("htmo2String \(error)") } } }else{ completionBlock(NSAttributedString(string: self)) } } }