2016-05-04 9 views
2

I Objective-C zu Swift bin Umwandlung und lief in Code, der einen Apple App Store Empfang NSData in eine Base64-codierte Zeichenfolge dreht.neue Swift Weg für Base64EncodedStringFromData Objective-C

Der Code wird mit der Funktion Base64EncodedStringFromData von https://github.com/stackmob/stackmob-ios-sdk/blob/master/Utility/Base64EncodedStringFromData.m

Von einem Stackoverflow Beitrag mit dem Titel Base64 Encoding/Decoding with Swift 2, ich sehe, wie NSData zu kodieren.

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

Aber ich denke, ich sollte stattdessen folgendes tun, wenn ich das Ergebnis wollen die gleiche wie die Base64EncodedStringFromData Funktion sein:

let base64String = transactionReceipt.base64EncodedStringWithOptions([]) 

Sind die „Base64EncodedStringFromData“ und transactionReceipt. base64EncodedStringWithOptions ([]) entspricht? Ich habe vor zu experimentieren. Ich möchte jedoch sicherstellen, dass das Konzept korrekt ist.

+0

Ich kann Ihre Frage nicht beantworten, aber ich möchte darauf hinweisen, dass in Swift, können Sie den Aufzählungstyp Name vor dem Aufzählungswert absinken kann. Man könnte schreiben Sie einfach '.Encoding64CharacterLineLength' und' NSDataBase64EncodingOptions.Encoding64CharacterLineLength' wird – Alexander

+0

abgeleitet werden Experimentation zeigt, dass unser Server und Apple den Ersatz Swift Code von transactionReceipt.base64EncodedStringWithOptions nimmt ([]) gut. – finneycanhelp

+0

Vielen Dank @AMomchilov für den Hinweis, dass die .Encoding64CharacterLineLength abgeleitet werden würde. Ich habe beschlossen, es da drin zu lassen, da es sich um ein Zitat aus einem anderen Post handelt. – finneycanhelp

Antwort

1

Sind diese beiden gleichwertig? - Die Antwort ist nein, aber es hängt von der Länge der Zeichenfolge ab.

Wenn Sie einen Blick auf die Apple documentation werfen, heißt es eindeutig, wenn Sie keine Zeilenlänge angeben, dann wird die Codierung Carriage Return + Line Feed sein.

Auch ich habe einen kleinen Test geschrieben, um einen Blick zu nehmen, weil ich auch Base64-Codierung bin.

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") 

Es wird "gleich" für die erste Anweisung und "nicht gleich" für die zweite Anweisung gedruckt.

Also abschließend, wenn die Zeichenfolge länger als eine bestimmte Länge ist (was 64 Zeichen lang sein könnte, aber ich bin nicht sicher), wird sie nicht gleich sein. Es wird "\ r \ n" in die konvertierte Zeichenkette eingefügt.

+0

Danke für Ihre schnelle Antwort. Ich erweiterte die Frage von "Sind diese beiden gleichwertig?" sind die "Base64EncodedStringFromData" und transactionReceipt.base64EncodedStringWithOptions ([]) gleichwertig? Ich entschuldige mich. Die Frage "Sind diese zwei Äquivalente" war zu vage. – finneycanhelp

Verwandte Themen