如何在Swift中将字符串编码为Base64? [英] How can I encode a string to Base64 in Swift?
问题描述
我想将字符串转换为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)")
ref: 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迁移器建议的(单击装订线中的错误消息,并带有"fix-it"建议).
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代替地图)
(if using Swift 1.2 you could use multiple if-lets instead of the map)
迅速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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!