首页 > 解决方案 > 如何将html转换为字符串

问题描述

为了将 html 转换为字符串,我使用了这个扩展

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 {
        return html2AttributedString?.string ?? ""
    }
}

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

但是我在 API 中得到的文本我必须使用NSAttributedString.DocumentType.html并且有时使用NSAttributedString.DocumentType.plain

如何结合这两个参数?

标签: htmlswift

解决方案


这些扩展的作用是 (1) 从 HTML 字符串中创建Data对象,(2) 将Data对象转换为NSAtrributedString对象。换句话说,它如下所示。

import UIKit

class ViewController: UIViewController {
    // MARK: - Variables

    // MARK: - IBOutlet
    @IBOutlet weak var label: UILabel!

    // MARK: - IBAction
    override func viewDidLoad() {
        super.viewDidLoad()

        let htmlStr = makeHTMLString()
        let data = Data(htmlStr.utf8)
        if let attributedString = try?NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) {
            //print(attributedString.string)
            label.attributedText = attributedString
        }
    }

    func makeHTMLString() -> String {
        return "<html>\n<head></head>\n<body>\n<h1>Hello, world!</h1>\n</body>\n</html>"
    }
}

最后,您不需要这些扩展。


推荐阅读