这可能是最简单的一个,但我无法找到确切的原因。而不是用以下单词解释我的代码:
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
}。
如果NULL
为NULL,如何在NSInteger
中获得NSString
值?
答案 0 :(得分:10)
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
等,具体取决于返回类型。)
答案 1 :(得分:2)
实际上你可以实现这样的逻辑:
这样的事情可以解决问题:
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");
}
答案 2 :(得分:1)
整数只能包含数字而不能保存空值。在这种情况下,您应首先检查字符串的长度,以检查它是否为空
答案 3 :(得分:0)
NSInteger
是标量变量类型。当转换为NSInteger时,值NULL
(ObjectiveC中实际为nil
,表示指向地址0
的指针将为0
。
要完成任务,您必须先将NSString
与nil
进行比较,然后再将其转换为整数。
if (str == nil)
{
//our string is invalid
}
else
{
tempInteger = [str integerValue];
}