DocumentReadingOptionKey键在swift4迁移后损坏

时间:2017-09-29 08:19:44

标签: swift4 xcode9

使用以下代码从swift3迁移到swift4,

let options: [NSAttributedString.DocumentReadingOptionKey: AnyHashable] =
                          [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue]

            let str = try NSAttributedString( data:string!.data(using: String.Encoding.utf8, allowLossyConversion: true
                )!, options:options, documentAttributes: nil)

iOS 9+没有问题,在运行iOS 8.3时,控制台输出:“dyld:找不到符号:_NSCharacterEncodingDocumentOption”;它将在评论“.characterEncoding:String.Encoding.utf8.rawValue”之后传递。

2 个答案:

答案 0 :(得分:4)

我找到了解决方案。你应该为swift4删除.characterEncoding。 它适用于ios8,9,11。

示例:

public func htmlToString() -> String? {
        guard let data = data(using: .utf8) else { return nil }
        do {
            return try NSAttributedString(
                data: data,
                options: [
                    .documentType: NSAttributedString.DocumentType.html
                ],
                documentAttributes: nil
            ).string
        } catch let error as NSError {
            print(error.localizedDescription)
            return  nil
        }
    }

祝你有个美好的一天!

答案 1 :(得分:1)

对于所有iOS 8,使用这种方式键

NSAttributedString.DocumentReadingOptionKey(rawValue: "CharacterEncoding")

而不是放

NSAttributedString.DocumentReadingOptionKey.characterEncoding

直接

注意:请勿使用版本检查来致电NSAttributedString.DocumentReadingOptionKey.characterEncoding,否则,它仍然无效。