2010-01-05 14 views

Respuesta

39

No puede. A BOOL es YES o NO. No hay otro estado La forma de evitar esto sería usar un NSNumber ([NSNumber numberWithBool:YES];), y luego verificar si el NSNumber en sí es nil. O tenga un segundo BOOL para indicar si ha alterado el valor del primero.

+4

En realidad, un 'BOOL' puede no ser' SÍ' o 'NO'. La única forma segura de trabajar con 'BOOL' es verificar si es' NO' o '! NO'. 'BOOL' es un' typedef' para 'signed char'. – dreamlax

+3

@dreamlax Cierto, podría establecer un BOOL en 1 o 2, pero para mí eso parece una perversión del propósito del typedef. –

+1

@Dave, no se trata solo de asignaciones, por ejemplo, si un 'BOOL' es el valor de retorno de un método que simplemente devuelve un valor basado en una operación de máscara de bits' char', entonces el valor de retorno puede no ser 0 o 1. Idealmente, el método debería devolver '((flags & mask) == mask)' pero no es obligatorio. – dreamlax

5

Resulta molesto que Objective-C no tenga ninguna clase booleana. Ciertamente se siente como debería y eso hace que mucha gente se mueva. En colecciones y datos básicos, todos los bools se almacenan como instancias NSNumber.

Es realmente molesto tener que convertir de ida y vuelta todo el tiempo.

+0

¿Qué ganarías si tuvieras una clase booleana que no tienes con NSNumber? Todavía tendría que convertir de ida y vuelta con BOOL escalares para almacenamiento en cosas como NSArray y Core Data. –

2

De forma predeterminada, un valor bool se establece en 0 en Objective-C, por lo que no es necesario que compruebe si el valor bool es nulo en cualquier momento.

Cuestiones relacionadas