我使用了NSNumber類。爲什麼NSNumber比較方法不同?
但是可以使用的方法在以下環境中是不同的。
首先是命令行工具環境中的圖片。 (Mac os x)
其次是單視圖應用程序環境中的圖片。 (IOS)
:不能使用isGreaterThan :, isGreaterThanOrEqualTo :, isLessThan:..等等方法
爲什麼這樣做?
1]第一張照片
2]第二張照片
我使用了NSNumber類。爲什麼NSNumber比較方法不同?
但是可以使用的方法在以下環境中是不同的。
首先是命令行工具環境中的圖片。 (Mac os x)
其次是單視圖應用程序環境中的圖片。 (IOS)
:不能使用isGreaterThan :, isGreaterThanOrEqualTo :, isLessThan:..等等方法
爲什麼這樣做?
1]第一張照片
2]第二張照片
您在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;
}
這些方法是NSComparisonMethods協議的一部分,它存在於Mac上,但不在iOS上。至於爲什麼它不存在於iOS上:它是Cocoa的腳本支持的一部分,它沒有被移植到iOS,因爲AppleScript和OSA在那裏不存在。
我不確定爲什麼會有差異。我檢查了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的值小於 接收者的值。
爲什麼你會在這裏使用BOOL? – Chuck 2011-12-18 23:31:03
@Chuck心不在焉,我想 – 2011-12-19 00:09:28
+1在創建方法上做得很好。 – 2011-12-18 23:18:00