将NSNumber转换为BOOL目标C.

时间:2012-04-26 21:32:58

标签: iphone objective-c ios ipad

我想将整数01转换为BOOLEAN YESNO

我的代码:

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

它将输出设为(null)

可能出现什么问题?

6 个答案:

答案 0 :(得分:17)

首先,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);

BOOL只是signed char s,因此您无法使用%@格式说明符,但您可以使用任何整数格式说明符,例如%d,{ {1}}或%i

但是,要输出%cYES,您需要使用字符串:

NO

答案 1 :(得分:5)

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

如果后者将int转换为值01转换为BOOL,则只需转换:

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"; }

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

答案 2 :(得分:2)

正如sch提到的那样,你把它搞砸了:

NSNumber *num = 0;
  • 星号是指向对象(RAM中的内存块)的指针/引用。 它只能保存对象的内存块的内存地址值(无整数/布尔值)。 即使在Objective-C中也不要将BOOL,int,float,double,NSInteger数值类型与对象(NSNumber)错误。

答案 3 :(得分:2)

Int转换为BOOL

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

NSNumber *num = [NSNumber numberWithInt:0]; // num is 0 or 1
BOOL myBool = [num boolValue];  // myBool is NO or YES

答案 4 :(得分:1)

由@jacob Relkin指出。你使用NSNumber是错误的。

其次,boolValue可以转换NSStringNSNumber - > BOOLboolValue有效:

  

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

int您可以将其用作boolean

  

BOOL a = num; //将表现得像boolValue。

答案 5 :(得分:1)

我不知道我是否完全正确,但当你指定一个NSNumber为'0'时你给的值是'nil'如果你想要这个数字你应该去'@ 0'或'@ 1'或使用“numberwithint”方法