繁体   English   中英

如果NSString为NULL,则NSInteger返回0

[英]NSInteger returning 0 if NSString is NULL

这可能是最简单的原因,但我无法找到确切原因。 相反,用文字解释以下是我的代码:

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

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

如果NSString返回NULLNSInteger返回0;如果NSString具有某个值,则NSInteger返回相同值。

但是当NSStringNULL我希望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任何方法都会根据返回类型返回0nil0.0等。)

实际上,您可以实现如下逻辑:

  1. 检查您的字符串是否确实是整数
  2. 尝试转换
  3. 如果等于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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM