1. ホーム
  2. ios

SwiftでHTMLをプレーンテキストに変換する

2023-09-25 02:45:16

質問

Xcodeの初心者向けプロジェクトとして、簡単なRSSリーダーアプリを作成しています。現在、フィードを解析し、タイトル、公開日、説明、コンテンツを配置し、WebViewに表示するように設定しています。

最近、投稿を選択するために使用するTableViewに説明文(または内容の切り捨て版)を表示することにしました。しかしながら、そうする際に

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

投稿の生のHTMLが表示されます。

TableViewの詳細UILabelだけ、HTMLをプレーンテキストに変換する方法を教えていただきたいです。

ありがとうございます!

どのように解決するのですか?

この拡張機能を追加すると、htmlコードを通常の文字列に変換することができます。

edit/updateを行います。

議論 HTMLインポータはバックグラウンドの スレッド (つまり、オプション辞書に documentType が含まれ、その値が が html の値である場合)。メイン スレッドとの同期を試みて失敗します。 そしてタイムアウトします。メイン スレッドから呼び出すと動作します (ただし、HTML の参照に HTMLに外部リソースへの参照が含まれている場合、タイムアウトする可能性があります。 これは何としても避けるべきです)。HTMLインポート機構は HTMLインポート機構はマークダウンのようなもの(つまり、テキストスタイル、色など)を実装するためのものです。 色など)を実装するためのものであり、一般的なHTMLインポートのためのものではありません。

Xcode 11.4 - Swift 5.2。

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


extension StringProtocol {
    var html2AttributedString: NSAttributedString? {
        Data(utf8).html2AttributedString
    }
    var html2String: String {
        html2AttributedString?.string ?? ""
    }
}


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