Cannot convert value of type 'NSAttributedString.DocumentAttributeKey' to expected dictionary key type 'NSAttributedString.DocumentReadingOptionKey'

Swift 3切换为Swift 4,原来用于转换html为NSAttributedString的代码报错:

Cannot convert value of type 'NSAttributedString.DocumentAttributeKey' to expected dictionary key type 'NSAttributedString.DocumentReadingOptionKey'

Swift 3代码:

func html2AttributedString() -> NSAttributedString {
    return try! NSAttributedString(
       data: self.data(using: String.Encoding.unicode, allowLossyConversion: true)!, 
       options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
       documentAttributes: nil)
}

在Swift 4转换为NSAttributedString需要使用DocumentType选项:

  • doc:NSAttributedString.DocumentType.docFormat
  • html:NSAttributedString.DocumentType.html
  • plain文本:NSAttributedString.DocumentType.plain
  • 富文本:NSAttributedString.DocumentType.rtf
  • 带有附件的富文本:NSAttributedString.DocumentType.rtfd

所以Swift4对应的代码为:

func html2AttributedString() -> NSAttributedString {
 return try! NSAttributedString(
    data: modifiedFont.data(using: .unicode, allowLossyConversion: true)!,
    options:[.documentType: NSAttributedString.DocumentType.html,
    .characterEncoding: String.Encoding.utf8.rawValue],
    documentAttributes: nil)
}

需要加上

.characterEncoding: String.Encoding.utf8.rawValue

否则可能会导致app崩溃。

版权声明:著作权归作者所有。

相关推荐

Jenkins集成Git ssh key密钥认证

Jenkins有两种方法集成Git的ssh key认证:这种方法很简单,只要把私钥拷贝到jenkins用户的~/.ssh目录,当git使用ssh访问仓库时会尝试使用此私钥。1、切换为jenkins用户$sudo su jenkins 2、创建.ssh目录,已存在目录忽略此步$cd ~ $mkdir .ssh 3、创建访问git的ssh k

Swift 4的KVO(Key Value Observation)用法

KVO 是 Objective-C 对观察者模式的实现。当被观察对象的某个属性发生更改时,观察者对象会获得通知。KVO实现依赖于Objective-C的Runtime,所以Swift需要使用@objc暴露api给Objective C。Swift目前没有内置原生实现的值观察系统,Swift 4的KVO使用dynamic属性来实现。被观察的类clas

[译]Vue - 解决Cannot Find Element错误

如果你刚接触Vue,可能会遇到一些不熟悉的错误。实际上,我在创建delimiter app时看到了一个我不太熟悉的错误。例如,你可能在Vue里看到“Cannot find element”的错误。在Google Chrome中,你会在控制台窗口中看到此错误,如下所示:发生这种错误是因为过早实例化Vue。通常情况下,你会看到此错误,是因为挂载Vue的HTML元