NSNumberクラスを使用しました。NSNumberの比較方法が異なるのはなぜですか?
しかし、以下の環境では使用できる方法が異なります。
最初はコマンドラインツール環境の画像です。 (Mac OS X)
2番目はシングルビューアプリケーション環境の画像です。 (iOS版)
は..等の方法それをしたのはなぜ
:isGreaterThan :, isGreaterThanOrEqualTo :, isLessThanを使用することができませんか?
1]最初の画像
2]第二画像
NSNumberクラスを使用しました。NSNumberの比較方法が異なるのはなぜですか?
しかし、以下の環境では使用できる方法が異なります。
最初はコマンドラインツール環境の画像です。 (Mac OS X)
2番目はシングルビューアプリケーション環境の画像です。 (iOS版)
は..等の方法それをしたのはなぜ
:isGreaterThan :, isGreaterThanOrEqualTo :, isLessThanを使用することができませんか?
1]最初の画像
2]第二画像
あなたがMac上で見ているこれらの方法ではありません実際にはNSNumber
クラスではなく、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;
}
これらのメソッドはNSComparisonMethodsプロトコルの一部で、Macでは存在しますが、iOSでは存在しません。なぜそれがiOS上に存在しないのか:それはAppleScriptとOSAがそこに存在しないので、iOSに移植されなかったCocoaのスクリプティングサポートの一部です。
なぜ違いがあるのか分かりません。私は、ios 5.0とOS X 10.6のドキュメントをチェックしました。彼らはどちらもisGreater ...メソッドを持っていません。
あなたは
- (NSComparisonResult)compare:(NSNumber *)aNumber
NSComparisonResult compResult = [test compare:aNumber];
を使用してNSNumber
Sを比較し、aNumberの値は、受信機の、NSOrderedSameより 大きければ、テスト> = aNumber
if (compResult == NSOrderedDescending || compResult == NSOrderedSame) {
}
戻り値NSOrderedAscendingをチェックできます等しい場合は aNumberの値が受信者の より小さい場合はNSOrderedDescendingを返します。
なぜここでBOOLを使用しますか? – Chuck
@Chuck不注意、私は推測する –
+1このメソッドを作成する際によく行われます。 –