Quiero convertir una cadena a Base64. Encontré respuestas en varios lugares, pero ya no funciona en Swift. Estoy usando Xcode 6.2. Creo que la respuesta podría funcionar en versiones anteriores de Xcode y no en Xcode 6.2.
¿Podría alguien guiarme para hacer esto en Xcode 6.2?
La respuesta que encontré fue esta, pero no funciona en mi versión de Xcode:
var str = "iOS Developer Tips encoded in Base64"
println("Original: \(str)")
// UTF 8 str from original
// NSData! type returned (optional)
let utf8str = str.dataUsingEncoding(NSUTF8StringEncoding)
// Base64 encode UTF 8 string
// fromRaw(0) is equivalent to objc 'base64EncodedStringWithOptions:0'
// Notice the unwrapping given the NSData! optional
// NSString! returned (optional)
let base64Encoded = utf8str.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!)
println("Encoded: \(base64Encoded)")
// Base64 Decode (go back the other way)
// Notice the unwrapping given the NSString! optional
// NSData returned
let data = NSData(base64EncodedString: base64Encoded, options: NSDataBase64DecodingOptions.fromRaw(0)!)
// Convert back to a string
let base64Decoded = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Decoded: \(base64Decoded)")
ref: http://iosdevelopertips.com/swift-code/base64-encode-decode-swift.html
Respuestas:
No tengo 6.2 instalado, pero no creo que 6.3 sea diferente en este sentido:
dataUsingEncoding
devuelve un opcional, por lo que debe desenvolverlo.NSDataBase64EncodingOptions.fromRaw
ha sido reemplazado porNSDataBase64EncodingOptions(rawValue:)
. Sorprendentemente, este no es un inicializador fallido, por lo que no es necesario que lo desenvuelva.Pero dado que
NSData(base64EncodedString:)
es un inicializador que falla, debes desenvolverlo.Por cierto, todos estos cambios fueron sugeridos por el migrador de Xcode (haga clic en el mensaje de error en el canal y tiene una sugerencia de "arreglarlo").
El código final, reescrito para evitar desenvolvimientos forzados, se ve así:
(si usa Swift 1.2, puede usar varios if-lets en lugar del mapa)
Actualización de Swift 5:
fuente
[]
lugar deNSDataBase64EncodingOptions(rawValue: 0)
?Rápido
fuente
dfYcSGpvBqyzvkAXkdbHDA==
y la salida esperada tenía que ser:u�Hjo���@���
pero la función anterior devuelve nil. Puede verificar la salida de la cadena base 64 anterior en estos sitios: Sitio1 , Sitio2Podrías hacer una extensión simple como:
iOS 7 y superior
fuente
Swift 4.0.3
fuente
Data(self.utf8).base64EncodedString()
opcional, se necesitaría para toBase64 (). Respuesta de abajo: stackoverflow.com/a/35360697/129202Rápido 4.2
fuente
Después de una investigación exhaustiva, encontré la solución.
Codificación
Descodificación
Más sobre esto http://creativecoefficient.net/swift/encoding-and-decoding-base64/
fuente
Xcode 8.3.2 • Swift 3.1
fuente
Rápido 3 o 4
fuente
Swift 5.1 , Xcode 11 :
fuente
Rápido 3/4 / 5.1
Aquí hay una
String
extensión simple , que permite conservar opciones en caso de error al decodificar.Ejemplo:
fuente
Después de toda la lucha, me gustó esto.
Después de llamar a otra función para convertir una cadena decodificada en un diccionario
// de la cadena al diccionario
fuente
PARA SWIFT 3.0
fuente
Rápido 4.2
para decodificar, consulte (de https://gist.github.com/stinger/a8a0381a57b4ac530dd029458273f31a )
fuente
SwiftyBase64 (divulgación completa: lo escribí) es una codificación nativa Swift Base64 (sin biblioteca de decodificación. Con ella, puede codificar Base64 estándar:
o URL y nombre de archivo Safe Base64:
fuente
Respuesta de @Airspeed Velocity en Swift 2.0:
fuente