Подтвердить что ты не робот

Ошибка Swift-3: '- [_ SwiftValue unsignedIntegerValue]: непризнанный селектор

Следующий код отлично работал со старым быстрым. Это расширение строки

func stringByConvertingHTML() -> String {
    let newString = replacingOccurrences(of: "\n", with: "<br>")
    if let encodedData = newString.data(using: String.Encoding.utf8) {
        let attributedOptions : [String: AnyObject] = [
            NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
            NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 as AnyObject
        ]
        do {
            let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) //Crash here
            return attributedString.string
        } catch {
            return self
        }
    }
    return self
}

Но в быстрой 3 он падает, говоря

*** Завершение приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '- [_ SwiftValue unsignedIntegerValue]: непризнанный селектор, отправленный в экземпляр 0x6080002565f0

Кто-нибудь, пожалуйста, предложите мне, что нужно делать?

4b9b3361

Ответ 1

Я столкнулся с той же проблемой:

let attributedOptions : [String: AnyObject] = [
            NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
            NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 as AnyObject
        ]

Здесь String.Encoding.utf8 проверка типа не выполняется. Используйте NSNumber(value: String.Encoding.utf8.rawValue)

Ответ 2

В Swift3 больше не требуется применять к AnyObject, а также нет NSNumber.

let attrs: [String: Any] = [
            NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
            NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue
        ]

Ответ 3

Этот пост спас мой день. После миграции на Swift 3 небольшое изменение String.Encoding.utf8 до String.Encoding.utf8.rawValue зафиксировало ловушку, указанную здесь.

Ориг. линия:

...
    options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
              NSCharacterEncodingDocumentAttribute: String.Encoding.utf8],
...

изменено на

options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
          NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue],