NSNumber的比較方法


在NSNumber中, 我們要如何對比兩個基本數據類型對象是否相等呢? 我們可以用一些方法來實現.

 

涉及的方法:

BOOL:

isEqualToNumber:通過返回一個BOOL值, 判斷前者基本數據類型對象是否和后者基本數據類型對象相等.

 

compare:通過返回一個NSComparisonResult值, 判斷前者基本數據類型對象是否大於, 小於或者等於后者基本數據類型對象.

NSOrderedAscending: 表示前者小於后者.

NSOrderedSame: 表示兩者相等.

NSOrderedDescending: 表示前者大於后者.

PS: 大家看到例子中有一個intNumber對象和floatNumber對比或許會感覺到奇怪, 其實在OC上這樣子的比較是允許的, 因為它們都屬於同一個類簇里面, 在同一類簇里的類型都是可以相互比較的.

下面我們來看看例子:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSNumber *intNumber = [[NSNumber alloc]initWithInt:10];
        NSNumber *intNumber2 = [[NSNumber alloc]initWithInt:10];
        NSNumber *floatNumber = [[NSNumber alloc]initWithFloat:3.14f];
        
        //下面是通過一個BOOL的方法進行大小對比, 看它們是否相等.
        //順便說一下, OC中的BOOL判斷方法和C語言的不太一樣, 如果兩個數值是相等的才返回1
        //其他全部返回0;
        BOOL ret = [intNumber isEqualToNumber:intNumber2];
        NSLog(@"%d", ret);
        
        //這里的對比可以誇類型對比, 雖然我們知道它們不相等的.
        BOOL ret2 = [intNumber isEqualToNumber:floatNumber];
        NSLog(@"%d", ret2);
        //這里我們一看就是intNumber和intNumber2是不相等的, 所以返回的數值是0
        
        //也可以使用判斷語句
        //NSOrderedAscending是前者小於后者的意思.
        if([intNumber compare:intNumber2] == NSOrderedAscending){
            NSLog(@"<");
            
        }
        //NSOrderedSame是指左右兩邊都相等.
        else if([intNumber compare:intNumber2] == NSOrderedSame){
            NSLog(@"==");
        }
        //NSOrderedDescending是只前者大於后者的意思.
        else if([intNumber compare:intNumber2] == NSOrderedDescending){
            NSLog(@">");
        }
    }
    return 0;
}

輸出的結果:

2014-10-13 21:51:38.824 ContrastNSNumber[6911:303] 1
2014-10-13 21:51:38.825 ContrastNSNumber[6911:303] 0
2014-10-13 21:51:38.826 ContrastNSNumber[6911:303] intNumber == intNumber2
Program ended with exit code: 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM