2016-07-21 32 views
0

Ich fand this post zu einem konvertieren Int in NSDataWie Bool NSData konvertieren

Er sagt, dies zu tun:

var foo: Int = 1000 
let data = NSData(bytes: &foo, length: sizeof(Int)) 

Ich frage mich, sollte ich das denken gleiche tun, um eine Bool für die Umwandlung zu NSData, wie folgt aus:

var purchase: Bool = true 
let data = NSData(bytes: &purchase, length: sizeof(Bool)) 

In meinem Fall ich weiß immer, dass die Bool wird wahr sein. Da dies der Fall ist, habe ich mich gefragt, ob es eine einfachere Methode gibt, den Wert "true" in ein NSData Objekt zu konvertieren.

Einige Hintergrundinformationen Kontext:

Ich Speicherung dieser NSData Wert im Schlüsselbund mit this library.

ich auch mit NSKeyedUnarchiver.unarchiveObjectWithData

+0

versuchen, bool in int konvertieren und dann in NSData konvertieren –

+0

Ich würde das Bool in ein Byte, nicht int konvertieren. Dann mach einfach ein 'NSData setBytes'. Da Bool ein signiertes Zeichen ist und ein Zeichen ein Byte ist, gibt es keine Umwandlung. Wirf es einfach auf ein Byte. – Putz1103

+0

'NSNumber (booleanLiteral: Kauf)' kann boo in Zahl umwandeln. – Khundragpan

Antwort

0

Sie versuchen Bool erstreckt, um mit einer Funktion, die NSData

(ich habe nicht die IDE bei mir richtig zurückgibt, kann den NSData Wert wieder in einen bool konvertiert sein werde jetzt, so könnte die Syntax sein Recht nicht)

extension Bool { 
    func toNSData() -> NSData { 
    var data: NSData? 
    if (self.value) { //not sure if this is the right syntax 
     return NSData(bytes: 1, length: sizeof(Int)) 
    } 
    return NSData(bytes: 0, lentgh: sizeOf(Int)) 
    } 
} 

Dann kann jede Bool haben NSData Darstellung wie so

let b: Bool = true 
let data: NSData = b.toNSData() 

Ich bin noch neu in diesem, aber ich denke, das Obige ist Teil der "Protokoll-orientierte Programmierung", die Apple ermutigt.