2011-12-18 84 views
2

我使用了NSNumber類。爲什麼NSNumber比較方法不同?

但是可以使用的方法在以下環境中是不同的。

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

其次是單視圖應用程序環境中的圖片。 (IOS)

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

爲什麼這樣做?

1]第一張照片

first picture

2]第二張照片

second picture

回答

5

您在Mac上看到這些方法都沒有實際上的一部分NSNumber類,而是被稱爲NSComparisonMethods的非正式協議的一部分,該協議僅在Mac OS X上可用。此協議中的方法實際上只是使用許多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; 
} 
+0

+1在創建方法上做得很好。 – 2011-12-18 23:18:00

1

這些方法是NSComparisonMethods協議的一部分,它存在於Mac上,但不在iOS上。至於爲什麼它不存在於iOS上:它是Cocoa的腳本支持的一部分,它沒有被移植到iOS,因爲AppleScript和OSA在那裏不存在。

0

我不確定爲什麼會有差異。我檢查了ios 5.0和OS X 10.6的文檔。他們都沒有isGreater ...方法。

可以使用

- (NSComparisonResult)compare:(NSNumber *)aNumber 

NSComparisonResult compResult = [test compare:aNumber]; 

比較你NSNumber S和檢查測試> = aNumber的

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

} 

返回值NSOrderedAscending如果aNumber的值大於接收器的,NSOrderedSame更大 如果它們相等,並且 NSOrderedDescending如果aNumber的值小於 接收者的值。

+0

爲什麼你會在這裏使用BOOL? – Chuck 2011-12-18 23:31:03

+0

@Chuck心不在焉,我想 – 2011-12-19 00:09:28