ios - unreachable - try catch swift 4
Error de Swift-3: ''-[_ SwiftValue unsignedIntegerValue]: selector no reconocido (3)
En Swift3 ya no se necesita lanzar a AnyObject y tampoco NSNumber.
let attrs: [String: Any] = [
NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue
]
El siguiente código funcionó perfectamente con el viejo swift. Esta es una extensión de String
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
}
Pero en Swift 3 se bloquea diciendo
*** Finalización de la aplicación debido a la excepción no detectada ''NSInvalidArgumentException'', razón: ''- [_ SwiftValue unsignedIntegerValue]: selector no reconocido enviado a la instancia 0x6080002565f0''
Alguien por favor sugierame lo que hay que hacer?
Esta publicación me salvó el día.
Después de migrar a Swift 3, el pequeño cambio
String.Encoding.utf8
a
String.Encoding.utf8.rawValue
arregló la trampa que se informa aquí.
Línea original:
...
options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8],
...
cambiado a
options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue],
agregue
.rawValue
al final ...
Tuve el mismo problema:
let attributedOptions : [String: AnyObject] = [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 as AnyObject
]
Aquí el
String.Encoding.utf8
falla la verificación de tipo.
Use
NSNumber(value: String.Encoding.utf8.rawValue)