Je veux convertir une chaîne en Base64. J'ai trouvé des réponses à plusieurs endroits, mais cela ne fonctionne plus dans Swift. J'utilise Xcode 6.2. Je pense que la réponse pourrait être un travail dans les versions précédentes de Xcode et non dans Xcode 6.2.
Quelqu'un pourrait-il s'il vous plaît me guider pour faire cela dans Xcode 6.2?
La réponse que j'ai trouvée était la suivante, mais cela ne fonctionne pas dans ma version 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)")
réf: http://iosdevelopertips.com/swift-code/base64-encode-decode-swift.html
Réponses:
Je n'ai pas installé 6.2 mais je ne pense pas que 6.3 soit différent à cet égard:
dataUsingEncoding
renvoie un optionnel, vous devez donc le déballer.NSDataBase64EncodingOptions.fromRaw
a été remplacé parNSDataBase64EncodingOptions(rawValue:)
. Légèrement surprenant, ce n'est pas un initialiseur disponible, vous n'avez donc pas besoin de le déballer.Mais comme il
NSData(base64EncodedString:)
s'agit d' un initialiseur disponible, vous devez le déballer.Btw, tous ces changements ont été suggérés par Xcode Migrator (cliquez sur le message d'erreur dans la gouttière et il a une suggestion de «correction»).
Le code final, réécrit pour éviter le déballage forcé, ressemble à ceci:
(si vous utilisez Swift 1.2, vous pouvez utiliser plusieurs if-let au lieu de la carte)
Mise à jour de Swift 5:
la source
[]
placeNSDataBase64EncodingOptions(rawValue: 0)
?Rapide
la source
dfYcSGpvBqyzvkAXkdbHDA==
et la sortie attendue devait être:u�Hjo���@���
mais la fonction ci-dessus renvoie nil. Vous pouvez vérifier la sortie de la chaîne de base 64 ci-dessus sur ces sites: Site1 , Site2Vous pouvez simplement faire une simple extension comme:
iOS 7 et plus
la source
Swift 4.0.3
la source
Data(self.utf8).base64EncodedString()
option serait nécessaire pour toBase64 (). De ci-dessous, réponse: stackoverflow.com/a/35360697/129202Swift 4.2
la source
Après des recherches approfondies, j'ai trouvé la solution
Codage
Décodage
En savoir plus sur http://creativecoefficient.net/swift/encoding-and-decoding-base64/
la source
Xcode 8.3.2 • Swift 3.1
la source
Swift 3 ou 4
la source
Swift 5.1 , Xcode 11 :
la source
Swift 3/4 / 5.1
Voici une
String
extension simple , permettant de conserver les options en cas d'erreur lors du décodage.Exemple:
la source
Après toute lutte, j'ai fait comme ça.
Après avoir appelé une autre fonction pour convertir une chaîne décodée en dictionnaire
// pour la chaîne au dictionnaire
la source
POUR SWIFT 3.0
la source
Swift 4.2
pour décoder, voir (de https://gist.github.com/stinger/a8a0381a57b4ac530dd029458273f31a )
la source
SwiftyBase64 (divulgation complète: je l'ai écrit) est un encodage natif Swift Base64 (pas de bibliothèque de décodage. Avec lui, vous pouvez encoder la norme Base64:
ou URL et nom de fichier Safe Base64:
la source
Réponse @Airspeed Velocity dans Swift 2.0:
la source