如何在Swift中将字符串编码为Base64?

我想将字符串转换为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)")

参考:http : //iosdevelopertips.com/swift-code/base64-encode-decode-

swift.html

回答:

我没有安装6.2,但我认为6.3在这方面没有任何不同:

dataUsingEncoding 返回一个可选的,所以您需要打开它。

NSDataBase64EncodingOptions.fromRaw已替换为NSDataBase64EncodingOptions(rawValue:)。令人惊讶的是,这不是一个失败的初始化程序,因此您无需拆开包装。

但是,由于它NSData(base64EncodedString:) 一个失败的初始化器,因此您需要对其进行包装。

顺便说一句,所有这些更改都是Xcode迁移器建议的(单击装订线中的错误消息,并带有“ fix-it”建议)。

最终代码经过重写以避免强制展开,如下所示:

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代替地图)

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? 的全部内容, 来源链接: utcz.com/qa/426216.html

回到顶部