如何在swift中将字符串编码为base64

前端之家收集整理的这篇文章主要介绍了如何在swift中将字符串编码为base64前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将一个字符串转换为base64。我在几个地方发现相同的答案,但它不工作了swift。我使用Xcode 6.2。我相信答案可能工作在以前的Xcode不是Xcode 6.2。

有人可以请指导我这样做在Xcode 6.2?

我发现的答案是这样的。但它不工作在Xcode 6.2

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在这方面有什么不同:

dataUsingEncoding返回一个可选的,所以你需要解包。

NSDataBase64EncodingOptions.fromRaw已经替换为NSDataBase64EncodingOptions(rawValue :)。稍微令人惊讶的是,这不是一个可用的初始化程序,所以你不需要打开它。

但是因为NSData(base64EncodedString :)是一个failable初始化,你需要解包。

Btw,所有这些更改建议由Xcode migrator(单击错误消息在天沟,它有一个“修复”的建议)。

最终代码,重写以避免强制解包,看起来像这样:

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而不是地图)

猜你在找的Swift相关文章