Iphone 将布尔值转换为整数的正确方法?

Iphone 将布尔值转换为整数的正确方法?,iphone,objective-c,int,boolean,type-conversion,Iphone,Objective C,Int,Boolean,Type Conversion,每次我尝试将布尔值转换为int时,int值都显示为-8表示真,0表示假。理想情况下,它应该返回1表示true 我尝试了所有可能的转换方式,比如 int val=Info.isattachementDownloadable; int val=[[NSString stringWithFormat:@"%d", Info.isattachementDownloadable] intValue]; int val=(int)Info.isattachementDownloadable; 其中Info

每次我尝试将布尔值转换为int时,int值都显示为-8表示真,0表示假。理想情况下,它应该返回1表示true

我尝试了所有可能的转换方式,比如

int val=Info.isattachementDownloadable;
int val=[[NSString stringWithFormat:@"%d", Info.isattachementDownloadable] intValue];
int val=(int)Info.isattachementDownloadable;
其中
Info.isattachement可下载
return BOOL

从各个方面来看,它都显示了-8为真

有什么建议吗?

也许会有帮助(虽然我不知道为什么一开始就需要它)

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

希望它能帮助您。

这样做更快:

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

如果
myBool
为是,则
myInt
将为1;如果
myBool
为否,则为0。

始终可以在数字原语(例如C的int)周围使用面向对象的包装。那么我在回答这个问题吗?是和否取决于你的观点。但是,当使用BOOL作为输入时,我更喜欢使用以下内容:

NSNumber *numval = [NSNumber numberWithBool:Info.isattachementDownloadable];
如果您确实需要使用基本数据类型:

int val = [numval intValue];

您可以将布尔值指定给int,因为YES和NO只是1和0的快捷方式。您还可以对布尔值执行数学运算。 仅供参考,bool甚至可以保存从-128到127的值,因为它们只是有符号字符的typedef

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

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

参考资料:

这很简单。。。但是你没有做任何转换。。。这是不可能的吗?太好了,我正在寻找:)。。。我不知道为什么我错过了这个:(我要指出,对于需要高效率的代码来说,这是一种糟糕的将BOOL转换为int的方法,因为每次转换发生时它都会分配一个对象。我同意,这不是最快的方法,也不是内存友好的方法,但这是我所知道的最直接的objc方法。无论如何,如果你需要效率,你总是可以回到p用
int myInt=(someBool?1:0);
放在c上,正如你在回答中所建议的那样。@AlexNichol[NSNumber numberWithBool:YES]返回一个单例。无论调用多少次,最多只能有一个分配。例如,当您想将UIButton上的tag属性用作BOOL时,可能需要使用此属性-无论按钮最近是否按下。然后您不需要在控制器中为此声明任何额外属性。我做了简单的
int intVar=boolVar;
并且它在int中采用正确的值,即1代表1,0代表0,甚至更好,
myBool!=0
,或者JavaScript的专利
!!myBool
。我可能是错的,但在Obj-c中作为int使用时,BOOL不会自动转换为这个int值吗?例如NSLog(@“%i”,YES+YES);logs 2
BOOL someBool = YES;
int intFromBool = someBool;
NSLog(@"%d", intFromBool);

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