NSInteger不等于nil。

15

如何检查 NSInteger 是否有效?

NSInteger previousScore = [[self score] integerValue];
    if (previousScore != nil) {
        //do something
    }

以下是有关编程的内容,请翻译成中文:请仅返回翻译后的文本。 - hello_there_andy
2个回答

16

如果您想在代码中检查有效性,可以这样做:

NSNumber *previousScore = [self score];

if ( previousScore != nil ) {
  NSInteger previousScoreValue = [previousScore integerValue];
  // do something
}

这个代码可行,因为它返回的是一个对象,而不是一个原始值。


谢谢。好主意。我正在读取和写入 plist,所以数组中的所有内容都必须是 NSNumber。 - dreadbot

13

NSInteger不是一个对象。它只是一个强制类型转换的原始类型int。因此,它永远不会是nil。和使用直接的int一样对待它即可。

编辑: 为了进一步解释Cesar的评论,在64位系统上,NSInteger实际上是long类型,在32位系统中则为int


2
定义如下:#if LP64 typedef long NSInteger; #else typedef int NSInteger; endif - Cesar A. Rivas
5
默认情况下,在许多情况下,NSInteger会是nil,因为nil与零相同...但您可能会收到编译器警告。在给出的示例代码中,如果[self score]返回nil,则previousScore将为0(nil)。 - Kendall Helmstetter Gelner
不幸的是,nil 就是 0。在调试器中尝试输入 "po nil == 0"。它会打印出 "true"。 - nont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接