Правильный способ преобразования значения BOOL в INT?

каждый раз, когда я пытался преобразовать значение BOOL в int. Значение INT показывает -8 для True и 0 для False. В идеале он должен возвращать 1 для true.

Я пробовал все возможные способы преобразования, такие как

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

здесь Info.isattachementDownloadable вернуть BOOL

во всех отношениях его отображение -8 для TRUE.

любое предложение ?

5 ответов


может быть, это поможет (думал, что я не знаю, почему это может понадобиться в первую очередь)

NSInteger i = @(YES).integerValue;

надеюсь, что это поможет вам.


гораздо быстрее сделать это так:

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

myInt будет 1, Если myBool "да", и 0, если myBool нет.


всегда можно использовать объектно-ориентированную оболочку вокруг числовых примитивов (например, с инт). Так я отвечаю на вопрос? и да и нет в зависимости от вашей точки зрения. Однако вот что я предпочитаю использовать при использовании BOOL в качестве ввода:

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

и если вам действительно нужно использовать примитивный тип данных:

int val = [numval intValue];

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

вы можете просто назначить значение BOOL для int, так как да и нет-это просто ярлыки для 1 и 0. Вы также можете выполнять математические операции на BOOLs. FYI, BOOLs могут даже содержать значения от -128 до 127, так как они просто typedefs для подписанных символов.

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

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

ссылка:https://www.bignerdranch.com/blog/bools-sharp-corners/