6

我想将整数转换为BOOLEAN 01YESNO

我的代码:

    NSNumber *num = 0;
    BOOL myBool = [num boolValue];
    NSLog(@"bool is: %@",myBool);

它给出的输出为(null)

有什么问题?

4

6 回答 6

19

首先,您的初始化NSNumber不正确。您应该使用以下+numberWith:定义的类方法之一NSNumber

+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
+ (NSNumber *)numberWithShort:(short)value;
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
+ (NSNumber *)numberWithLong:(long)value;
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
+ (NSNumber *)numberWithLongLong:(long long)value;
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;
+ (NSNumber *)numberWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0);
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0);

BOOLs 只是signed chars,因此您不能使用%@格式说明符,但您可以使用任何整数格式说明符,例如%d,%i%c.

但是,要输出YESor NO,您需要使用字符串:

NSLog(@"bool is: %@", (myBool) ? @"YES" : @"NO");
于 2012-04-26T21:34:05.170 回答
6

鉴于分配不正确,NSNumber您是否真的要创建一个包含整数的对象,或者您的标题问题“将 int 转换为 BOOL”是否正确?

int如果是后者,则使用该值转换 an0或转换1BOOL您只需转换:

int num = ...; // num is 0 or 1
BOOL myBool = (BOOL)num; // myBool is NO or YES

然而,更好的转换是:

BOOL myBool = num != 0; // myBool is NO for 0, YES for anything else

因为这遵循了 Obj-C(和 C)的概念,即零为假,非零为真。

如果您希望将BOOL值转换为字符串"YES""NO"那么这个简单的函数将有效地完成它:

NS_INLINE NSString *BoolToStr(BOOL b) { return b ? @"YES" : @"NO"; }

只需将其放在方便的标题中,然后在需要的地方导入即可。

于 2012-04-27T00:02:04.553 回答
4

隐蔽IntBOOL

将值为 0 或 1 的 int 转换为刚转换的 BOOL

NSNumber *num = [NSNumber numberWithInt:0]; // num is 0 or 1
BOOL myBool = [num boolValue];  // myBool is NO or YES
于 2017-06-30T11:15:39.013 回答
2

正如 sch 提到的,你在这里搞砸了:

NSNumber *num = 0;
  • 星号是对对象(RAM 中的一块内存)的指针/引用。它可以只保存对象的内存块的内存地址值(没有整数/布尔值)。即使在 Objective-C 中,也不要将 BOOL、int、float、double、NSInteger 数字类型与对象 (NSNumber) 混淆。
于 2012-04-26T21:44:55.627 回答
1

正如@jacob Relkin 指出的那样。你用错了NSNumber

其次,boolValue可以转换NSStringNSNumber-> BOOLboolValue作品:

跳过初始空格字符 (whitespaceSet),或可选的 -/+ 符号后跟零。遇到 "Y"、"y"、"T"、"t" 或数字1-9之一时返回 YES 。它忽略任何尾随字符。

因为int你可以用它作为boolean

布尔 a = 数;//将表现得就像 boolValue。

于 2012-04-27T06:34:23.490 回答
1

我不知道我对此是否完全正确,但是当您将 NSNumber 分配为“0”时,如果您想要数字,则应给出值“nil”,您应该选择“@0”或“@1”或使用方法“numberwithint”

于 2012-10-25T13:42:20.057 回答