Подтвердить что ты не робот

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

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

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

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

где Info.isattachementDownloadable возвращает BOOL

Во всех отношениях его показ -8 для TRUE.

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

4b9b3361

Ответ 1

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

NSInteger i = @(YES).integerValue;

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

Ответ 2

Это гораздо быстрее сделать следующим образом:

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

myInt будет равно 1, если myBool - YES, а 0, если myBool - NO.

Ответ 3

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

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

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

int val = [numval intValue];

Ответ 4

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

Ответ 5

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

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

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

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