为什么NSNumber比较方法不同?

S.J*_*Lim 2 objective-c

我使用过NSNumber类.

但是可以使用的方法在以下环境中是不同的.

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

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

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

为什么这样?

1]第一张照片

第一张照片

2]第二张图片

第二张照片

Mar*_*ams 5

你在Mac上看到的那些方法实际上并不是NSNumber该类的一部分,而是属于非正式协议的一部分,该协议NSComparisonMethods仅在Mac OS X上可用.该协议中的方法实际上只是使用该compare:方法的方便方法可用于许多Cocoa类.如果您愿意,可以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;
}
Run Code Online (Sandbox Code Playgroud)