在Swift中将HTML转换为纯文本

我正在做一个简单的RSS阅读器应用程序作为Xcode的初学者项目。 我现在已经build立了它分析饲料,并放置标题,发布date,描述和内容,并显示在一个WebView。

我最近决定在用于selectpost的TableView中显示描述(或内容的截断版本)。 但是,这样做时:

cell.textLabel?.text = item.title?.uppercaseString cell.detailTextLabel?.text = item.itemDescription //.itemDescription is a String 

它显示post的原始HTML。

我想知道如何将HTML转换为纯文本的只是TableView的详细UILabel。

谢谢!

您可以添加此扩展名将您的html代码转换为一个常规string:

编辑/更新:

Xcode 9 beta•Swift 4

 extension String { var html2AttributedString: NSAttributedString? { do { return try NSAttributedString(data: Data(utf8), options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil) } catch { print("error:", error) return nil } } var html2String: String { return html2AttributedString?.string ?? "" } } 

Xcode 8.3•Swift 3.1

 extension String { var html2AttributedString: NSAttributedString? { do { return try NSAttributedString(data: Data(utf8), options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil) } catch { print("error:", error) return nil } } var html2String: String { return html2AttributedString?.string ?? "" } } 

 cell.detailTextLabel?.text = item.itemDescription.html2String 

这是我build议的答案。 而不是扩展,如果你想把里面的function。

 func decodeString(encodedString:String) -> NSAttributedString? { let encodedData = encodedString.dataUsingEncoding(NSUTF8StringEncoding)! do { return try NSAttributedString(data: encodedData, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute:NSUTF8StringEncoding], documentAttributes: nil) } catch let error as NSError { print(error.localizedDescription) return nil } } 

并调用该函数并将NSAttributedString强制转换为String

 let attributedString = self.decodeString(encodedString) let message = attributedString.string 

请使用以下代码testingdetailTextLabel:

 var attrStr = NSAttributedString( data: item.itemDescription.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true), options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil, error: nil) cell.detailTextLabel?.text = attrStr 

我已经使用Danboz的答案,只改变它返回一个简单的string(不是一个丰富的文本string):

 static func htmlToText(encodedString:String) -> String? { let encodedData = encodedString.dataUsingEncoding(NSUTF8StringEncoding)! do { return try NSAttributedString(data: encodedData, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute:NSUTF8StringEncoding], documentAttributes: nil).string } catch let error as NSError { print(error.localizedDescription) return nil } } 

对我来说,它像一个魅力,感谢Danboz

 //Swift 4, Xcode 9 extension String { var utfData: Data? { return self.data(using: .utf8) } var attributedHtmlString: NSAttributedString? { guard let data = self.utfData else { return nil } do { return try NSAttributedString(data: data, options: [ .documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue ], documentAttributes: nil) } catch { print(error.localizedDescription) return nil } } } extension UITextView { func setHtmlText(_ html: String) { if let attributedText = html.attributedHtmlString { self.attributedText = attributedText } } }