将BOOL值转换为INT的正确方法?

时间:2011-07-21 11:04:12

标签: iphone objective-c int boolean type-conversion

每当我尝试将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为真。

有什么建议吗?

5 个答案:

答案 0 :(得分:26)

也许这会有所帮助(我想我不知道为什么可能首先需要它)

NSInteger i = @(YES).integerValue;

希望它对你有所帮助。

答案 1 :(得分:21)

这样做要快得多:

BOOL myBool = YES;
int myInt = (myBool ? 1 : 0);
如果myInt为YES,则

myBool为1,如果myBool为NO,则为{0>。

答案 2 :(得分:2)

总是可以在数字基元周围使用面向对象的包装器(例如C' int)。所以我回答这个问题了吗?是和否取决于您的观点。但是,这是我在使用BOOL作为输入时更喜欢使用的内容:

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

如果你真的需要使用原始数据类型:

int val = [numval intValue];

答案 3 :(得分:1)

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

答案 4 :(得分:1)

您可以将BOOL值分配给int,因为YES和NO只是1和0的快捷方式。您还可以对BOOL执行数学运算。 仅供参考,BOOL甚至可以保持-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/