您好我使用以下代码将html转换为NSAttributtedString。我的问题是我第一次执行它需要很长时间:
var html = "<b>Whatever...</b>"
var attributedText = try! NSMutableAttributedString(
data: html.data(using: String.Encoding.unicode, allowLossyConversion: true)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
当我第一次执行转换时,执行需要很长时间。随后的执行花费的时间更少。有什么方法可以减少这个漫长的首次执行? 我想在应用程序执行开始时在后台执行此代码,但我想知道是否还有其他智能解决方案或库,我应该导入。
答案 0 :(得分:0)
使用“String.Encoding.utf8”而不是“String.Encoding.unicode” 这可能会缩短您的转换时间
var html = "<bold>Wow!</bold> Now <em>iOS</em> can create <h3>NSAttributedString</h3> from HTMLs!"
let attributedOptions: [String: Any] = [
NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue
]
var attrString = try! NSAttributedString(data: html.data(using: String.Encoding.utf8)!, options: attributedOptions, documentAttributes: nil)
YOUR_TEXT_VIEW.attributedText = attrString
答案 1 :(得分:0)
我没有找到任何方法来缩短转换时间。但是有一种方法可以“破解”负载时间。
似乎转换过程在第一次调用时需要很长时间,但在下次调用时会减少。通过这种方式,我解决了在我的AppDelegate中加载一段“html垃圾邮件”的问题。因此,在使用应用程序期间,用户不会注意到缓慢加载。
<强>的AppDelegate:强>
override func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
super.application(application, willFinishLaunchingWithOptions: launchOptions)
try! NSMutableAttributedString(
data: "<a>asdasd</a>".data(using: String.Encoding.unicode, allowLossyConversion: true)!,
options: [
NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.unicode.rawValue
],
documentAttributes: nil)
return true
}
在ViewControllers中,您可以正常调用:
var html = "<b>Whatever...</b>"
var attributedText = try! NSMutableAttributedString(
data: html.data(using: String.Encoding.unicode, allowLossyConversion: true)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)