2011-07-21 24 views
12

Cada vez que intenté convertir el valor de BOOL en int. El valor INT muestra -8 para True y 0 para False. Lo ideal sería que devuelva 1 verdadero.Forma correcta de convertir el valor BOOL en INT?

me han tratado todas las maneras posibles de conversión como

int val=Info.isattachementDownloadable; 
int val=[[NSString stringWithFormat:@"%d", Info.isattachementDownloadable] intValue]; 
int val=(int)Info.isattachementDownloadable; 

donde Info.isattachementDownloadable retorno BOOL

De todas formas su mostrando -8 para TRUE.

¿Alguna sugerencia?

+0

lo hice sencilla 'int IntVar = Boolvar;' y toma el valor correcto en int, es decir, 1 por 1 y 0 para 0 –

Respuesta

26

Tal vez que le ayudará (pensaba que yo no sé por qué puede ser necesario, en primer lugar)

NSInteger i = @(YES).integerValue; 

esperanza de que le ayuda.

+0

Genial que estaba buscando :) ... No sé por qué me perdí este :( – Tariq

+0

Voy a señalar que, para el código que requiere alta eficiencia, este es un método pobre de convertir un BOOL en un int porque ** asigna ** un objeto cada vez que se lleva a cabo una conversión. –

+4

Estoy de acuerdo en que no es el método más rápido ni amigable con la memoria, pero es el más directo que conozco. De todos modos, si necesita eficiencia, siempre puede caerse. volver a la c simple con 'int myInt = (someBool? 1: 0);' como ha sugerido en su respuesta. :) – Ariel

1
BOOL myBool;  
int myInt; 
if (myBool) myInt = 1; 
else myInt = 0; 
+0

esto es bastante sencillo ... pero no están haciendo ninguna conversión ... ¿no es posible la conversión? – Tariq

21

Es mucho más rápido que hacerlo de esta manera:

BOOL myBool = YES; 
int myInt = (myBool ? 1 : 0); 

myInt será 1 si myBool es SÍ, y 0 si myBool es NO.

+0

O mejor aún, 'myBool! = 0', o' patentado '!! myBool' de JavaScript. – Blindy

+0

Puedo estar equivocado, pero ¿no se convierte automáticamente BOOL a este valor int de todos modos en Obj-c cuando se usa como int?Por ejemplo, NSLog (@ "% i", YES + YES); registros 2 –

2

Siempre es posible usar la envoltura orientada a objetos alrededor de las primitivas numéricas (por ejemplo, C's int). Entonces, ¿estoy respondiendo la pregunta? tanto sí como no dependiendo de tu punto de vista. Sin embargo, esto es lo que prefiero usar cuando se utiliza BOOL como entrada:

NSNumber *numval = [NSNumber numberWithBool:Info.isattachementDownloadable]; 

Y si realmente es necesario utilizar el tipo de datos primitivo:

int val = [numval intValue]; 
1

sólo se puede asignar un valor BOOL a int desde SÍ y NO son solo accesos directos para 1 y 0. También puede realizar operaciones matemáticas en BOOL. FYI, BOOL incluso puede contener valores de -128 hasta 127 ya que solo son typedefs para caracteres firmados.

BOOL someBool = YES; 
int intFromBool = someBool; 
NSLog(@"%d", intFromBool); 

intFromBool -= YES; 
NSLog(@"%d", intFromBool); 

Referencia: https://www.bignerdranch.com/blog/bools-sharp-corners/

Cuestiones relacionadas