如果NSString为NULL,则NSInteger返回0

时间:2012-07-28 13:19:13

标签: objective-c ios nsinteger

这可能是最简单的一个,但我无法找到确切的原因。而不是用以下单词解释我的代码:

NSString *str = @"";
NSInteger tempInteger = [str integerValue];

if (tempInteger == 0)
{
  NSLog (@"do something");
}

如果NSString返回NULL,则NSInteger返回0,如果NSString有一些值,则NSInteger返回相同的值。

但当NSStringNULL时,我希望NSInteger应该返回NULL而不是0,但我无法将NSInteger验证为NULL }。

如果NULL为NULL,如何在NSInteger中获得NSString值?

4 个答案:

答案 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的任何方法都会返回0nil0.0等,具体取决于返回类型。)

答案 1 :(得分:2)

实际上你可以实现这样的逻辑:

  1. 检查您的字符串是否确实是整数
  2. 尝试转换它
  3. 如果它等于0做某事
  4. 这样的事情可以解决问题:

    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

要完成任务,您必须先将NSStringnil进行比较,然后再将其转换为整数。

if (str == nil)
{
   //our string is invalid
}
else
{
    tempInteger = [str integerValue];
}