Swift 3 NSCharacterEncodingDocumentAttribute 的一处坑

项目中有一个方法的作用是把 HTML 字符串解析成 AttributedString,升级到 Swift 3 后,下面这段代码会 crash。


var attributedString: NSAttributedString

do {
    try attributedString = NSAttributedString(
        data: htmlString.data(using: String.Encoding.utf8)!,
        
        options: [
            NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
            NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 ],
        
        documentAttributes: nil)
} catch _ {
    attributedString = NSAttributedString()
}          

问题出在 options 中的 NSCharacterEncodingDocumentAttribute 属性,crash 的原因是 String.Encoding.utf8 无法直接转换成 Int,需要把这一行改成:

NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue