Ich möchte einen String in Base64 konvertieren. Ich habe an mehreren Stellen Antworten gefunden, aber in Swift funktioniert es nicht mehr. Ich benutze Xcode 6.2. Ich glaube, die Antwort könnte in früheren Xcode-Versionen und nicht in Xcode 6.2 funktionieren.
Könnte mich bitte jemand anleiten, dies in Xcode 6.2 zu tun?
Die Antwort, die ich gefunden habe, war folgende, aber sie funktioniert in meiner Version von Xcode nicht:
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
Antworten:
Ich habe 6.2 nicht installiert, aber ich denke nicht, dass 6.3 in dieser Hinsicht anders ist:
dataUsingEncoding
Gibt eine Option zurück, daher müssen Sie diese auspacken.NSDataBase64EncodingOptions.fromRaw
wurde ersetzt durchNSDataBase64EncodingOptions(rawValue:)
. Es ist etwas überraschend, dass dies kein fehlerhafter Initialisierer ist, sodass Sie ihn nicht auspacken müssen.Da es sich jedoch
NSData(base64EncodedString:)
um einen fehlerhaften Initialisierer handelt, müssen Sie diesen auspacken.Übrigens wurden alle diese Änderungen vom Xcode-Migrator vorgeschlagen (klicken Sie auf die Fehlermeldung in der Gosse und es gibt einen "Fix-it" -Vorschlag).
Der endgültige Code, der neu geschrieben wurde, um ein gewaltsames Auspacken zu vermeiden, sieht folgendermaßen aus:
(Wenn Sie Swift 1.2 verwenden, können Sie anstelle der Karte mehrere If-Lets verwenden.)
Swift 5 Update:
quelle
[]
stattNSDataBase64EncodingOptions(rawValue: 0)
?Schnell
quelle
dfYcSGpvBqyzvkAXkdbHDA==
und die erwartete Ausgabe musste sein:u�Hjo���@���
Die obige Funktion gibt jedoch null zurück. Sie können die Ausgabe der obigen Base-64-Zeichenfolge auf diesen Sites überprüfen : Site1 , Site2Sie können einfach eine einfache Erweiterung durchführen wie:
iOS 7 und höher
quelle
Swift 4.0.3
quelle
Data(self.utf8).base64EncodedString()
kein optional für toBase64 benötigt würden (). Von unten Antwort: stackoverflow.com/a/35360697/129202Swift 4.2
quelle
Nach gründlicher Recherche habe ich die Lösung gefunden
Codierung
Dekodierung
Mehr dazu unter http://creativecoefficient.net/swift/encoding-and-decoding-base64/
quelle
Xcode 8.3.2 • Swift 3.1
quelle
Swift 3 oder 4
quelle
Swift 5.1 , Xcode 11 :
quelle
Swift 3/4 / 5.1
Hier ist eine einfache
String
Erweiterung, mit der Optionen im Falle eines Fehlers beim Decodieren beibehalten werden können.Beispiel:
quelle
Nach allem Kampf hat mir das gefallen.
Nachdem ich eine andere Funktion zum Konvertieren einer dekodierten Zeichenfolge in ein Wörterbuch aufgerufen habe
// für String zum Wörterbuch
quelle
FÜR SWIFT 3.0
quelle
Swift 4.2
Informationen zum Dekodieren finden Sie unter (unter https://gist.github.com/stinger/a8a0381a57b4ac530dd029458273f31a ).
quelle
SwiftyBase64 (vollständige Offenlegung: Ich habe es geschrieben) ist eine native Swift Base64-Codierung (keine Decodierungsbibliothek. Mit ihr können Sie Standard Base64 codieren:
oder URL und Dateiname Safe Base64:
quelle
@ Airspeed Velocity Antwort in Swift 2.0:
quelle