如何在 Swift 中将字符串编码为 Base64?
在 Swift 中,您可以使用内置的 Data 类型及其方法 base64EncodedString() 将字符串编码为 Base64。在 iOS 应用程序中,您可能需要在网络请求和响应中将字符串编码为 base64。大多数情况下,您需要将字符串编码为 base64,反之亦然。让我们学习如何使用 Swift 将字符串编码为 Base64。
示例
在此示例中,我们将使用以下步骤将字符串编码为 base64:
步骤 1 − 在此步骤中,我们将使用 data(using: .utf8) 方法将字符串转换为 Data 对象。在此方法中,我们传递 utf8 作为编码参数,因为这是最常见的编码方法。
步骤 2 − 在此步骤中,我们调用 base64EncodedString 方法将数据对象转换为 Base64 编码字符串。请记住,data(using:) 方法返回一个可选的数据对象。您可以使用可选绑定来解包它。
import Foundation let stringToEncode = "This is a sample string to encode in Base64 in Swift." if let data = stringToEncode.data(using: .utf8) { let base64String = data.base64EncodedString() print(base64String) }
输出
VGhpcyBpcyBhIHNhbXBsZSBzdHJpbmcgdG8gZW5jb2RlIGluIEJhc2U2NCBpbiBTd2lmdC4=
示例
将字符串编码为 Base64、将其解码回原始字符串形式以及处理可能发生的错误的另一个示例:
步骤 1 − 在第一步中,我们将定义一个名为“originalString”的输入字符串变量,并使用 data.base64EncodedString() 方法将其编码为 Base64,如前所述。如前所述,我们分两步对输入字符串进行编码。
步骤 2 − 解码输入字符串后。我们将使用 Data(base64Encoded:) 初始化方法将 Base64 字符串转换为 Data 对象。
步骤 3 − 如果初始化方法返回一个非 nil 的 Data 对象,我们将使用 String(data:encoding:) 初始化方法从 Data 对象创建一个字符串。
import Foundation let originalString = "This is a sample string to encode in Base64 in Swift." // Encode the string to Base64 if let data = originalString.data(using: .utf8) { let base64String = data.base64EncodedString() print("Base64-encoded string: \(base64String)") // Decode the Base64-encoded string back to the original string if let decodedData = Data(base64Encoded: base64String) { if let decodedString = String(data: decodedData, encoding: .utf8) { print("Decoded string: \(decodedString)") } else { print("Error decoding data: could not convert decoded data to string.") } } else { print("Error decoding base64-encoded string: could not create decoded data.") } } else { print("Error encoding string: could not create data.") }
输出
Base64-encoded string: VGhpcyBpcyBhIHNhbXBsZSBzdHJpbmcgdG8gZW5jb2RlIGluIEJhc2U2NCBpbiBTd2lmdC4= Decoded string: This is a sample string to encode in Base64 in Swift.
但是,如果要解码的数据无法转换为字符串或 Base64 编码文本不正确,则解码可能不会成功。我们使用可选绑定来管理这些情况,并在任何操作出错时打印错误消息。
为了保证数据正确地转换为字符串形式和从字符串形式转换回来,需要注意的是,在使用 Data 和 String 初始化方法时,我们指定了 .utf8 编码。
推荐方法
扩展在 Swift 中功能更强大。我们将为 String 创建一个扩展以及一些用于编码和解码字符串的方法。这是一个扩展:
import Foundation extension String { func base64Encoded() -> String? { data(using: .utf8)?.base64EncodedString() } func base64Decoded() -> String? { guard let data = Data(base64Encoded: self) else { return nil } return String(data: data, encoding: .utf8) } }
示例
以下是使用上述扩展的示例
let originalString = "This is a sample string to encode in Base64 in Swift." if let encodedString = originalString.base64Encoded() { print("Encoded String: \(encodedString)") if let decodedString = encodedString.base64Decoded() { print("Decoded String: \(decodedString)") } }
输出
Encoded String: VGhpcyBpcyBhIHNhbXBsZSBzdHJpbmcgdG8gZW5jb2RlIGluIEJhc2U2NCBpbiBTd2lmdC4= Decoded String: This is a sample string to encode in Base64 in Swift.
在上面的示例中,我们为 String 创建了一个扩展来编码和解码字符串。它看起来简洁且组织良好。您可以在整个应用程序中使用此扩展。在重复代码的情况下,无需在任何地方都编写它。
结论
使用 Data 类型及其 base64EncodedString() 方法,可以轻松地将字符串编码为 Swift 中的 Base64。将 Base64 编码的字符串解码回其原始形式需要使用 Data(base64Encoded:) 初始化方法从编码字符串建立 Data 对象,然后使用 String(data:encoding:) 初始化方法从 Data 对象创建字符串。
使用可选绑定并查找 nil 值来管理潜在的编码或解码问题非常重要。在将数据转换为字符串形式和从字符串形式转换回来时,使用正确的编码至关重要;字符串通常使用 .utf8 编码。