[解決済み] Swiftで文字列をBase64にエンコードするにはどうすればいいですか?
質問
文字列をBase64に変換したいのですが、どうすればいいですか?いくつかの場所で答えを見つけたのですが、Swiftではもう動きません。私はXcode 6.2を使っています。私は答えがXcode 6.2ではなく、以前のXcodeバージョンで動作する可能性があると信じています。
どなたか、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 migrator によって提案されたものです (ガターでエラーメッセージをクリックすると、"fix-it" の提案があります)。
force-unwrapを避けるために書き直した最終的なコードは以下のようになります。
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 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 ?? "")")
}
}
関連
-
[解決済み] base64文字列をエンコード、デコードするにはどうしたらいいですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] HTMLでBase64画像を表示する方法
-
[解決済み] バイナリデータをJSON文字列で。Base64より優れたもの
-
[解決済み] JavaScriptで画像をBase64文字列に変換するにはどうすればよいですか?
-
[解決済み】Node.jsでBase64エンコードを行うにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列をBase64にエンコードするにはどうすればいいですか?
-
[解決済み】JavaScriptでBase64文字列からBLOBを作成する場合
-
[解決済み】SwiftのwillSetとdidSetの目的は何ですか?
-
[解決済み】Swiftでボタンに丸みを帯びたボーダーを付けるにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] iPhone Simulator.appと一緒にXcodeも外付けハードディスクにインストールできますか?
-
[解決済み] Swiftでbase64StringをStringに変換する方法とは?
-
[解決済み] タイプ 'StorageMetadata' の値には、メンバー 'downloadURL' がありません。
-
[解決済み] 使用しているSwiftのバージョンを確認するにはどうすればよいですか?
-
[解決済み] Swift: print() vs println() vs NSLog()
-
[解決済み] Swiftでコアデータを日付(時間だけでなく)でソートする
-
[解決済み] SwiftでStringのサブストリングはどのように動作するか
-
[解決済み】Xcode 6 Beta 4でアプリを実行すると「表示権限がないため、ファイル "MyApp.app" を開くことができません。
-
[解決済み】Swiftの`let`と`var`の違いは何ですか?
-
[解決済み]SwiftでErrorタイプでローカライズされた説明を提供する方法は?