在 nil NSNumber 上使用比较是否总是 return NSOrderedSame?
Does using compare on a nil NSNumber always return NSOrderedSame?
NSNumber *badNum = 0;
NSNumber *goodNum = @42;
if ([badNum compare:goodNum] == NSOrderedAscending)
// ...
鉴于上面的代码片段,其中 badNum
实际上是 nil
, 是否保证永远不会输入 if
语句?
本质上,我想知道我是否必须在每次使用 -[NSNumber compare:]
时都进行 nil
检查,所以另一个问题是 我是否需要使用以下代码来确保比较总是像它出现的那样工作?
if (badNum && goodNum && [badNum compare:goodNum] == NSOrderedAscending)
// ...
是的,可以保证,只要苹果不改NSOrderedSame
,目前定义为零:
enum {
NSOrderedAscending = -1,
NSOrderedSame, // == 0
NSOrderedDescending // == 1
};
向 nil
发送 compare:
消息时出现 NSOrderedSame
的原因是 Objective-C 为 return 类型提供默认值目标是 nil
。由于NSOrderedSame
是0
,默认值,当badNum
是nil
时,你保证得到它。
NSNumber *badNum = 0;
NSNumber *goodNum = @42;
if ([badNum compare:goodNum] == NSOrderedAscending)
// ...
鉴于上面的代码片段,其中 badNum
实际上是 nil
, 是否保证永远不会输入 if
语句?
本质上,我想知道我是否必须在每次使用 -[NSNumber compare:]
时都进行 nil
检查,所以另一个问题是 我是否需要使用以下代码来确保比较总是像它出现的那样工作?
if (badNum && goodNum && [badNum compare:goodNum] == NSOrderedAscending)
// ...
是的,可以保证,只要苹果不改NSOrderedSame
,目前定义为零:
enum {
NSOrderedAscending = -1,
NSOrderedSame, // == 0
NSOrderedDescending // == 1
};
向 nil
发送 compare:
消息时出现 NSOrderedSame
的原因是 Objective-C 为 return 类型提供默认值目标是 nil
。由于NSOrderedSame
是0
,默认值,当badNum
是nil
时,你保证得到它。