なぜNSNumberの比較方法が異なるのですか?

NSNumberクラスを使用しました。

後続の環境では使用できる方法が異なります。

最初はコマンドラインツール環境の画像です。 (Mac OS X)

次に、シングルビューアプリケーション環境の画像を示します。 (iOS)

:isGreaterThan:、isGreaterThanOrEqualTo :, isLessThan:..などのメソッドは使用できません

それはなぜですか?

1]最初の画像

first picture

2] 2番目の画像

second picture

2

3 答え

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;
}
5
追加された
メソッドの作成に+1してください。
追加された 著者 Jesse Black,

これらのメソッドはNSComparisonMethodsプロトコルの一部であり、Macでは存在しますが、iOSでは存在しません。なぜそれがiOS上に存在しないのか:それはAppleScriptとOSAがそこに存在しないので、iOSに移植されなかったCocoaのスクリプティングサポートの一部です。

1
追加された

なぜ違いがあるのか​​分かりません。私は、ios 5.0とOS X 10.6のドキュメントをチェックしました。彼らはどちらもisGreater ...メソッドを持っていません。

NSNumber を使用して

- (NSComparisonResult)compare:(NSNumber *)aNumber

NSComparisonResult compResult = [test compare:aNumber];

and check for test >= aNumber

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

}

aNumberの値が大きい場合はNSOrderedAscendingの戻り値   受信者よりもNSOrdered等しい場合は同じです   NSNrderedDescending(aNumberの値が   受信者の

0
追加された
なぜあなたはここでBOOLを使用しますか?
追加された 著者 Chuck,
@チャックの不条理、私は推測する
追加された 著者 Jesse Black,