Я хочу преобразовать строку в Base64. Я нашел ответы в нескольких местах, но в Swift это больше не работает. Я использую Xcode 6.2. Я считаю, что ответ может работать в предыдущих версиях Xcode, а не в Xcode 6.2.
Может ли кто-нибудь помочь мне сделать это в Xcode 6.2?
Я нашел такой ответ, но он не работает в моей версии 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
Ответы:
У меня не установлена версия 6.2, но я не думаю, что 6.3 в этом отношении отличается:
dataUsingEncoding
возвращает необязательный параметр, поэтому вам нужно его развернуть.NSDataBase64EncodingOptions.fromRaw
был заменен наNSDataBase64EncodingOptions(rawValue:)
. Как ни странно, это не сбойный инициализатор, поэтому вам не нужно его разворачивать.Но так как
NSData(base64EncodedString:)
это failable инициализатор, вам нужно разворачивать это.Кстати, все эти изменения были предложены мигратором Xcode (щелкните сообщение об ошибке в канале, и в нем есть предложение «исправить»).
Окончательный код, переписанный, чтобы избежать принудительного развертывания, выглядит так:
(при использовании Swift 1.2 вы можете использовать несколько if-let вместо карты)
Обновление Swift 5:
источник
[]
вместоNSDataBase64EncodingOptions(rawValue: 0)
?[]
является значением по умолчанию, поэтому вы можете просто вызвать функцию, не передавая никаких параметров:utf8str?.base64EncodedString()
Swift
источник
dfYcSGpvBqyzvkAXkdbHDA==
и ожидаемый результат должен был быть:u�Hjo���@���
но функция выше возвращает nil. Вы можете проверить вывод указанной выше строки base-64 на следующих сайтах: Site1 , Site2Вы можете просто сделать простое расширение, например:
iOS 7 и выше
источник
Swift 4.0.3
источник
Data(self.utf8).base64EncodedString()
toBase64 () не требуется дополнительных опций. Ответ снизу: stackoverflow.com/a/35360697/129202Swift 4.2
источник
После тщательного исследования я нашел решение
Кодирование
Декодирование
Подробнее об этом http://creativecoefficient.net/swift/encoding-and-decoding-base64/
источник
Xcode 8.3.2 • Swift 3.1
источник
Swift 3 или 4
источник
Swift 5.1 , Xcode 11 :
источник
Свифт 3/4 / 5.1
Вот простое
String
расширение, позволяющее сохранить опции в случае ошибки при декодировании.Пример:
источник
После всей борьбы мне это понравилось.
После того, как я вызываю другую функцию для преобразования декодированной строки в словарь
// для строки в словарь
источник
ДЛЯ SWIFT 3.0
источник
Swift 4.2
для декодирования см. (из https://gist.github.com/stinger/a8a0381a57b4ac530dd029458273f31a )
источник
SwiftyBase64 (полное раскрытие: я написал) - это собственная кодировка Swift Base64 (без библиотеки декодирования. С ее помощью вы можете кодировать стандартный Base64:
или URL и имя файла Safe Base64:
источник
Ответ @Airspeed Velocity в Swift 2.0:
источник