为什么NSNumber比较方法不同?

时间:2011-12-18 22:55:34

标签: objective-c

我使用了NSNumber类。

但可以使用的方法在以下环境中有所不同。

首先是命令行工具环境中的图片。 (Mac os x)

其次是单视图应用环境中的图片。 (IOS)

:不能使用isGreaterThan:,isGreaterThanOrEqualTo:,isLessThan:..等等方法

为什么会这样?

  

1]第一张照片

first picture

  

2]第二张图片

second picture

3 个答案:

答案 0 :(得分:5)

您在Mac上看到的那些方法实际上并不是NSNumber类的一部分,而是属于仅在Mac OS X上可用的名为NSComparisonMethods的非正式协议的一部分。在这个协议中是方便的方法,实际上只使用许多Cocoa类上已有的compare:方法。如果您愿意,可以很容易地将这些方法作为NSNumber上的类别实现。以下是我将如何实施-isGreaterThanOrEqualTo:

@interface NSNumber (ConvenientComparison)

- (BOOL)isGreaterThanOrEqualTo:(id)object;

@end

@implementation NSNumber (ConvenientComparison)

- (BOOL)isGreaterThanOrEqualTo:(id)object
{
    if (![object isKindOfClass:[NSNumber class]])
    {
        // Not sure what NSNumber does if you pass in something that isn't a number.
        // Handle this case
        return NO;
    }

    NSNumber *numberToCompareAgainst = (NSNumber *)object;

    NSComparisonResult comparisonResult = [self compare:numberToCompareAgainst];

    if (comparisonResult == NSOrderedSame || comparisonResult == NSOrdereedDescending)
        return YES;

    return NO;
}

答案 1 :(得分:1)

这些方法是NSComparisonMethods协议的一部分,该协议存在于Mac上,但不存在于iOS上。至于它为什么在iOS上不存在:它是Cocoa脚本支持的一部分,由于AppleScript和OSA不存在,因此没有移植到iOS。

答案 2 :(得分:0)

我不确定为什么会有区别。我检查了ios 5.0和OS X 10.6的文档。他们都没有isGreater ......方法。

您可以使用

比较NSNumber
- (NSComparisonResult)compare:(NSNumber *)aNumber

NSComparisonResult compResult = [test compare:aNumber];

并检查测试> = aNumber

if (compResult == NSOrderedDescending || compResult == NSOrderedSame) {

}
  

如果aNumber的值更大,则返回值NSOrderedAscending   比接收者的,NSOrderedSame,如果他们是平等的,和   如果aNumber的值小于,则为NSOrderedDescending   接收机的