Ema*_*n87 5 iphone objective-c ipad ios
我想转换整数0和1BOOLEAN YES和NO
我的代码:
NSNumber *num = 0;
BOOL myBool = [num boolValue];
NSLog(@"bool is: %@",myBool);
Run Code Online (Sandbox Code Playgroud)
它给出了输出 (null)
可能有什么不对?
Jac*_*kin 18
首先,你的初始化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);
Run Code Online (Sandbox Code Playgroud)
BOOLs只是signed chars,所以你不能使用%@格式说明符,但你可以使用任何整数格式说明符,如%d,%i或%c.
但是,要输出YES或者NO,您需要使用字符串:
NSLog(@"bool is: %@", (myBool) ? @"YES" : @"NO");
Run Code Online (Sandbox Code Playgroud)
如果分配不正确NSNumber你真的是要创建一个包含整数的对象,或者你的标题问题"convert int to BOOL"是否正确?
如果是后者,然后到转换int与价值0或者1对BOOL你只投:
int num = ...; // num is 0 or 1
BOOL myBool = (BOOL)num; // myBool is NO or YES
Run Code Online (Sandbox Code Playgroud)
然而,更好的转换是:
BOOL myBool = num != 0; // myBool is NO for 0, YES for anything else
Run Code Online (Sandbox Code Playgroud)
因为这遵循Obj-C(和C)概念,即零为假且非零为真.
如果您希望将BOOL值转换为字符串"YES","NO"那么这个简单的函数将有效地执行:
NS_INLINE NSString *BoolToStr(BOOL b) { return b ? @"YES" : @"NO"; }
Run Code Online (Sandbox Code Playgroud)
只需将其放在方便的标题中,然后在需要的地方导入.
| 归档时间: |
|
| 查看次数: |
29478 次 |
| 最近记录: |