问题描述
我想将字符串转换为 Base64.我在几个地方找到了答案,但它在 Swift 中不再起作用.我正在使用 Xcode 6.2.我相信答案可能适用于以前的 Xcode 版本,而不是 Xcode 6.2.
I want to convert a string to Base64. I found answers in several places, but it does not work anymore in Swift. I am using Xcode 6.2. I believe the answer might be work in previous Xcode versions and not Xcode 6.2.
有人可以指导我在 Xcode 6.2 中执行此操作吗?
Could someone please guide me to do this in Xcode 6.2?
我找到的答案是这样的,但它在我的 Xcode 版本中不起作用:
The answer I found was this, but it does not work in my version of 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)")
参考:http://iosdevelopertips.com/swift-code/base64-encode-decode-swift.html
推荐答案
我没有安装 6.2 但我认为 6.3 在这方面没有什么不同:
I don’t have 6.2 installed but I don’t think 6.3 is any different in this regard:
dataUsingEncoding 返回一个可选的,所以你需要解开它.
dataUsingEncoding returns an optional, so you need to unwrap that.
NSDataBase64EncodingOptions.fromRaw 已替换为 NSDataBase64EncodingOptions(rawValue:).有点令人惊讶的是,这不是一个可失败的初始化程序,因此您不需要解包它.
NSDataBase64EncodingOptions.fromRaw has been replaced with NSDataBase64EncodingOptions(rawValue:). Slightly surprisingly, this is not a failable initializer so you don’t need to unwrap it.
但是由于 NSData(base64EncodedString:) 是一个可失败的初始化器,你需要解开它.
But since NSData(base64EncodedString:) is a failable initializer, you need to unwrap that.
顺便说一句,所有这些更改都是由 Xcode 迁移器建议的(单击排水沟中的错误消息,它有一个修复"建议).
Btw, all these changes were suggested by Xcode migrator (click the error message in the gutter and it has a "fix-it" suggestion).
为避免强制解包而重写的最终代码如下所示:
Final code, rewritten to avoid force-unwraps, looks like this:
import Foundation
let str = "iOS Developer Tips encoded in Base64"
println("Original: (str)")
let utf8str = str.dataUsingEncoding(NSUTF8StringEncoding)
if let base64Encoded = utf8str?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
{
println("Encoded: (base64Encoded)")
if let base64Decoded = NSData(base64EncodedString: base64Encoded, options: NSDataBase64DecodingOptions(rawValue: 0))
.map({ NSString(data: $0, encoding: NSUTF8StringEncoding) })
{
// Convert back to a string
println("Decoded: (base64Decoded)")
}
}
(如果使用 Swift 1.2,你可以使用多个 if-let 而不是 map)
(if using Swift 1.2 you could use multiple if-lets instead of the map)
Swift 5 更新:
import Foundation
let str = "iOS Developer Tips encoded in Base64"
print("Original: (str)")
let utf8str = str.data(using: .utf8)
if let base64Encoded = utf8str?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) {
print("Encoded: (base64Encoded)")
if let base64Decoded = Data(base64Encoded: base64Encoded, options: Data.Base64DecodingOptions(rawValue: 0))
.map({ String(data: $0, encoding: .utf8) }) {
// Convert back to a string
print("Decoded: (base64Decoded ?? "")")
}
}
这篇关于如何在 Swift 中将字符串编码为 Base64?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)