2016-05-04 2 views
2

私はObjective-CをSwiftに変換し、Apple App Storeの領収書NSDataをbase64でエンコードされた文字列に変換するコードを実行しました。新しいSwift Way for Base64EncodedStringFromData Objective-C

コードがBase64 Encoding/Decoding with Swift 2標題stackoverflowのポストからhttps://github.com/stackmob/stackmob-ios-sdk/blob/master/Utility/Base64EncodedStringFromData.m

から機能Base64EncodedStringFromDataを使用して、私はNSDataのを符号化する方法を参照します。

let base64String = imageData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) 

はしかし、私は結果がBase64EncodedStringFromData関数と同じようにしたい場合は代わりに次の操作を行うべきだと思う:

let base64String = transactionReceipt.base64EncodedStringWithOptions([]) 

「Base64EncodedStringFromData」とtransactionReceiptです。 base64EncodedStringWithOptions([])相当ですか?私は実験を計画している。しかし、私はそのコンセプトが正しいことを確認したい。

+0

私はあなたの質問に答えることはできませんが、Swiftでは列挙型の名前を列挙型の値の前にドロップできることを指摘したいと思います。あなたは '.Encoding64CharacterLineLength'と' NSDataBase64EncodingOptions.Encoding64CharacterLineLength'だけを書くことができます – Alexander

+0

実験では、私たちのサーバーとAppleがtransactionReceipt.base64EncodedStringWithOptions([])の置換Swiftコードをうまく使っていることを示しています。 – finneycanhelp

+0

.Encoding64CharacterLineLengthが推定されることを指摘してくれてありがとう@AMomchilov。私はそれを別の支柱からの引用であるので、そこに残すことに決めました。 – finneycanhelp

答えて

1

これらは同じですか? - 答えはノーですが、文字列の長さによって異なります。

Apple documentationを調べると、行の長さを指定しないと、エンコードはキャリッジリターン+改行になります。

また、私はbase64エンコーディングも使用しているため、小さなテストを書いています。

let someShortString = "someShortString" 
let encodedShortString = someShortString.dataUsingEncoding(NSUTF8StringEncoding)! 


let someLongString = "someLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongString" 
let encodedLongString = someLongString.dataUsingEncoding(NSUTF8StringEncoding)! 

let base64ShortStringWithoutParameters = encodedShortString.base64EncodedStringWithOptions([]) 
let base64ShortStringWithParameters = encodedShortString.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) 


let base64LongStringWithoutParameters = encodedLongString.base64EncodedStringWithOptions([]) 
let base64LongStringWithParameters = encodedLongString.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) 

base64ShortStringWithoutParameters == base64ShortStringWithParameters ? print("same") : print("not same") 
base64LongStringWithoutParameters == base64LongStringWithParameters ? print("same") : print("not same") 

最初の文では「同じ」と、2番目の文では「同じでない」と表示されます。

結論として、文字列が特定の長さより長い場合(64文字であるかもしれませんが、わかりません)、それらは同じではありません。変換された文字列に "\ r \ n"が挿入されます。

+0

あなたの迅速な対応に感謝します。私は「これらの2つは同等か」という質問を拡大した。 to "Base64EncodedStringFromData"とtransactionReceipt.base64EncodedStringWithOptions([])は同じですか?謝罪します。 「これら2つは同等か」という質問はあまりにも曖昧でした。 – finneycanhelp