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

2024-04-14移动开发问题
93

本文介绍了如何在 Swift 中将字符串编码为 Base64?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我想将字符串转换为 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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

从 Documents 目录存储和读取文件 iOS 5
Storing and reading files from Documents directory iOS 5(从 Documents 目录存储和读取文件 iOS 5)...
2024-08-12 移动开发问题
9

如何在使用 cocos2d 的 iphone 应用程序中使用 MYSQL 数据库连接?
How can i use MYSQL database connection in iphone application useing cocos2d?(如何在使用 cocos2d 的 iphone 应用程序中使用 MYSQL 数据库连接?)...
2024-08-12 移动开发问题
5

在 cocos2d 中平滑拖动一个 Sprite - iPhone
Smoothly drag a Sprite in cocos2d - iPhone(在 cocos2d 中平滑拖动一个 Sprite - iPhone)...
2024-08-12 移动开发问题
10

CCScrollView 滚动和触摸事件永远不会触发
CCScrollView scroll and touch events never firing(CCScrollView 滚动和触摸事件永远不会触发)...
2024-08-12 移动开发问题
1

“‘NSData’没有可见的@interface 声明选择器‘base64EncodedString’"MKS
quot;No visible @interface for #39;NSData#39; declares the selector #39;base64EncodedStringquot; error in MKStoreKit(“‘NSData’没有可见的@interface 声明选择器‘base64EncodedString’MKStoreKit 中的错误)...
2024-08-12 移动开发问题
3

使用 OpenGLES 的抗锯齿去除绳索的锯齿状边缘
removing jagged edges of my ropes using antialiasing of OpenGLES(使用 OpenGLES 的抗锯齿去除绳索的锯齿状边缘)...
2024-08-12 移动开发问题
34