每当我尝试将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为真。
有什么建议吗?
答案 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);