如何在 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 编码。

更新于: 2023年4月4日

6K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告