[英]NSInteger returning 0 if NSString is NULL
这可能是最简单的原因,但我无法找到确切原因。 相反,用文字解释以下是我的代码:
NSString *str = @"";
NSInteger tempInteger = [str integerValue];
if (tempInteger == 0)
{
NSLog (@"do something");
}
如果NSString
返回NULL
则NSInteger
返回0;如果NSString
具有某个值,则NSInteger
返回相同值。
但是当NSString
为NULL
我希望NSInteger
应该返回NULL
而不是0,但是我不能将NSInteger
验证为NULL
。
如果NSString
为NULL,如何在NSInteger
获取NULL
值?
NULL
是一个指针; NSInteger是只能容纳数字的C原语。 NSInteger永远不可能为NULL
。 (旁注:当谈到Objective-C对象指针时,我们使用nil
而不是NULL
。)
相反,如果只希望处理整数值为0但字符串不为 NULL
,则应按以下方式更改条件:
if (tempInteger == 0 && str != nil)
但是,在您的情况下,字符串不是nil
; 它只是一个存在的但空的字符串。 如果您还希望进行检查,则您的病情可能变为:
if (tempInteger == 0 && [str length] > 0)
这将检查这两种情况,因为nil
字符串将返回长度0
。 (实际上,发送到nil
任何方法都会根据返回类型返回0
, nil
, 0.0
等。)
实际上,您可以实现如下逻辑:
这样的事情可以解决问题:
NSString *str = @"";
NSInteger tempInteger = [str integerValue];
NSCharacterSet *cs = [NSCharacterSet decimalDigitCharacterSet];
BOOL safe = [cs isSupersetOfSet:[NSCharacterSet characterSetWithCharactersInString:str]] && str.length > 0;
if (safe && tempInteger == 0)
{
NSLog (@"do something");
}
整数只能保存数字,而不能为null。 在这种情况下,您应该首先检查字符串的长度以检查它是否为空
NSInteger
是标量变量类型。 值NULL
(在ObjectiveC中实际上为nil
),指示指向地址0
的指针,当转换为NSInteger时将为0
。
为了完成您的任务,必须将NSString
与nil
进行比较,然后再将其转换为整数。
if (str == nil)
{
//our string is invalid
}
else
{
tempInteger = [str integerValue];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.