Проблемы с html-тегами, имеющими класс в Swift, с использованием .replacingOccurences()

#html #ios #swift #webview #textview

Вопрос:

Я пытаюсь реализовать html внутри UITextView, но мне не удается отобразить абзацы или любые другие теги из HTML, у которых есть свои собственные классы, первая строка, в которой работает только p без класса, но другая с классом-нет. Может кто-нибудь выяснить, где я ошибаюсь?

Заранее спасибо.

 .replacingOccurrences(of: "<p", with: "<p style="font-family:Trenda-Regular;font-size:14px;"")
.replacingOccurrences(of: "<p class="semi-bold" ", with: "<p style="font-family:Trenda-Semibold;font-size:14px;"")
 

Редактировать

  let textView: UITextView = {
    let textView = UITextView()
    textView.isEditable = false
    
    let htmlText = 
    """
       <html>    
        <head>    
         <title>Terms of Use</title>    
       </head> 
        <body>   
          <p class="semi-bold">You shall not:</p>
       </body>
      </html>
   """
    textView.attributedText = html.htmlToAttributedString
    textView.translatesAutoresizingMaskIntoConstraints = false
    return textView
}()


extension String {

var localized: String {
    return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}

var htmlToAttributedString: NSAttributedString? {
    
    let text = self.replacingOccurrences(of: "<h3", with: "<h3 style="font-family:Trenda-Semibold;font-size:32px;"")
        .replacingOccurrences(of: "<h4", with: "<h4 style="font-family:Trenda-Regular;font-size:24px;"")
        .replacingOccurrences(of: "<h5", with: "<h5 style="font-family:Trenda-Regular;font-size:20px;"")
        .replacingOccurrences(of: "<p", with: "<p style="font-family:Trenda-Regular;font-size:14px;"")
        .replacingOccurrences(of: "<p class="semi-bold" ", with: "<p style="font-family:Trenda-Semibold;font-size:14px;"")
        .replacingOccurrences(of: "<strong", with: "<strong style="font-family:Trenda-Regular;font-size:14px;"")
        .replacingOccurrences(of: "<li", with: "<li style="font-family:Trenda-Regular;font-size:14px;"")
        .replacingOccurrences(of: "</ul>", with: "</ul></br>")
    
    guard let data = text.data(using: .utf8) else { return nil }
    do {
        return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil)
    } catch {
        return nil
    }
}

var htmlToString: String {
    return htmlToAttributedString?.string ?? ""
}
 

}

Комментарии:

1. NSAttributedString не справится с этой работой? Что за код после этого? Как вы используете полученный результат String ?

2. извините, мой вопрос был написан не очень хорошо. Я отредактировал свой вопрос, пожалуйста, взгляните. @Larme

3. Обратите внимание, что сначала вы <p заменяете p1, а затем "<p class="semi-bold" p2 , но если бы это было до a "<p class="semi-bold" , это было бы заменено на p1, а не на p2. Измените порядок