2010-01-05 7 views

Antwort

39

Sie können nicht. A BOOL ist entweder YES oder NO. Es gibt keinen anderen Staat. Der Weg dahin wäre, eine NSNumber ([NSNumber numberWithBool:YES];) zu verwenden, und dann zu überprüfen, ob die NSNumber selbst nil ist. Oder haben Sie eine zweite BOOL um anzuzeigen, wenn Sie den Wert der ersten geändert haben.

+4

Eigentlich kann ein 'BOOL' nicht' YES' oder 'NO' sein. Der einzige sichere Weg, mit 'BOOL' zu arbeiten, ist zu überprüfen, ob es entweder' NO' oder '! NO' ist. 'BOOL' ist ein' typedef' für 'signed char'. – dreamlax

+3

@dreamlax True, Sie könnten ein BOOL auf 1 oder 2 setzen, aber für mich scheint das eine Perversion des Zwecks des Typedef. –

+1

@Dave, es geht nicht nur um Assingments, zum Beispiel, wenn ein 'BOOL' der Rückgabewert einer Methode ist, die einfach einen Wert basierend auf einer' char'-dimensionierten Bitmaskenoperation zurückgibt, dann darf der Rückgabewert nicht 0 oder sein 1. Idealerweise sollte die Methode '((flags & mask) == mask) zurückgeben, aber das ist nicht erforderlich. – dreamlax

5

Ärgerlich, Objective-C hat keine Boolesche Klasse. Es fühlt sich an wie es sollte und das bringt viele Leute auf die Palme. In Collections und Core-Daten werden alle Bools als NSNumber-Instanzen gespeichert.

Es ist wirklich nervig, ständig hin und her zu konvertieren.

+0

Was würden Sie mit einer Booleschen Klasse bekommen, die Sie nicht mit NSNumber haben? Sie müssten immer noch mit skalaren BOOLs für die Speicherung in Dingen wie NSArray und Core Data konvertieren. –

2

Standardmäßig wird ein Bool-Wert in Objective-C auf 0 gesetzt, sodass Sie nicht überprüfen müssen, ob Ihr Bool-Wert immer Null ist.

Verwandte Themen