【问题标题】:Does using compare on a nil NSNumber always return NSOrderedSame?在 nil NSNumber 上使用比较是否总是返回 NSOrderedSame?
【发布时间】:2015-09-16 15:22:04
【问题描述】:
NSNumber *badNum = 0;
NSNumber *goodNum = @42;
if ([badNum compare:goodNum] == NSOrderedAscending)
    // ...

鉴于上面的 sn-p,其中badNum 实际上是nilif 语句是否保证永远不会被输入?

基本上,我想知道每次使用-[NSNumber compare:] 时是否必须检查nil,所以另一个问题是我是否需要使用以下代码来确保比较始终如其所示?

if (badNum && goodNum && [badNum compare:goodNum] == NSOrderedAscending)
    // ...

【问题讨论】:

  • 您需要的逻辑由您决定。您可能需要也可能不需要检查这些值是否为 nil,具体取决于您希望如何处理 nil 值。
  • @rmaddy 你能提供一些例子,当将compare: 发送给nil NSNumber* 是有益的吗?
  • 如果您正在对数字进行排序,您希望nil 值出现在排序的开头、结尾还是完全忽略?您对此的回答会影响 if 语句的编写方式。这取决于您和您的应用的需求。

标签: objective-c compare nsnumber


【解决方案1】:

可以,保证,只要苹果不改NSOrderedSame,目前定义为零:

enum {
   NSOrderedAscending     = -1,
   NSOrderedSame,      // == 0
   NSOrderedDescending // == 1
};

在向nil 发送compare: 消息时出现NSOrderedSame 的原因是Objective-C 在目标为nil 时为返回类型提供了默认值。因为NSOrderedSame0,默认值,所以当badNumnil时,你一定能得到。

【讨论】:

  • 所以我必须始终进行nil 检查?男人...:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2015-03-05
  • 2014-08-25
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多