Ответ 1
Попробуйте следующее:
extension Data {
var attributedString: NSAttributedString? {
do {
return try NSAttributedString(data: self, options:[NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil)
} catch let error as NSError {
print(error.localizedDescription)
}
return nil
}
}
Как описано в официальной ссылке, значение для ключа NSCharacterEncodingDocumentAttribute
должно быть NSNumber
.
NSCharacterEncodingDocumentAttribute
Значение этого атрибута - это объект
NSNumber
, содержащий целое число, определяющееNSStringEncoding
для файла;
В старых Swifts константы NSStringEncoding
импортируются как UInt
s, поэтому они автоматически соединяются с NSNumber
при преобразовании в AnyObject
, как указано в NSDictionary
.
Но теперь Swift ввел новый тип перечисления String.Encoding
, который не был создан как перечисление Objective-C. И, к сожалению, теперь любые типы Swift могут содержаться в NSDictionary
с промежуточным скрытым ссылочным типом _SwiftValue
, который определенно НЕ является NSNumber
.
Итак, вам нужно передать что-то, что можно привязать к NSNumber
как значение для клавиши NSCharacterEncodingDocumentAttribute
. В вашем случае rawValue
будет работать.
По-моему, это должно быть улучшено и лучше отправить отчет об ошибке в Apple или swift.org.