【发布时间】:2017-09-11 12:27:31
【问题描述】:
我想把HTML Tag转换成String,我用enum求String的内容长度,根据长度我需要做一些操作。
我的modal 班级,
class PostViewModel {
var content: TextContent
enum TextContent {
case expanded(String)
case collapsed(String)
static func == (lhs: TextContent, rhs: TextContent) -> Bool {
switch lhs {
case .collapsed(let content):
if case collapsed(content) = rhs {
return true
}
return false
case .expanded(let content):
if case expanded(content) = rhs {
return true
}
return false
}
}
}
}
我在cellForItem(at index: Int) 中调用这个函数,
func applyVerticalSizeConcernedRendering(fromViewModel viewModel: PostViewModel) {
switch viewModel.content {
case .collapsed(let content):
let str = content.html2String
print(str)
case .expanded(let content):
break
}
}
html2String 是extension 的String 的类
extension String {
var html2AttributedString: NSMutableAttributedString? {
guard let data = data(using: String.Encoding.utf8) else { return nil }
let attrs: [String: Any] = [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue
]
do {
let attrStr = try NSMutableAttributedString(data: data, options: attrs, documentAttributes: nil)
return attrStr
} catch let error as NSError {
print(error.localizedDescription)
return nil
}
}
var html2String: String {
return html2AttributedString?.string ?? ""
}
}
问题是它在将 HTML 标记转换为 String 时崩溃
这里崩溃了,
let attrStr = try NSMutableAttributedString(data: data, options: attrs, documentAttributes: nil)
而且String 不为空
下面是HTML String的例子,
<strong>I want to test HTML Tags<br><\/strong>dsfhjdjf sjdfdj djfjdfj djkf dfjdhf <strong>adjf<br>asks <\/strong>djfdkf<br><strong>dfdjk dkfjdk <\/strong>dfjik iai <strong>adsfhj<\/strong>
当我尝试使用硬编码值时,这工作正常,但只有当我从 enum 获得 String 时它才会崩溃
崩溃日志是,
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
有人可以帮忙吗?
【问题讨论】:
-
你能添加一个异常断点并检查它到底在哪一行失败了吗?
-
@TMob 我在问题中进行了编辑,它完全崩溃了
-
您尝试转换的 HTML 字符串是否有可能为空?
-
@MilanNosáľ 我 100% 确定,这不是空的
-
您可以将其添加到问题中吗?以便我们重现问题