2013-12-12 109 views
9

我正在寫一些代碼,它將使用NSMutableArray並在其中存儲int值,包裝在NSNumbers中。iOS如何檢查NSMutableArray是否包含NSNumber對象?

我想確認,使用新NSNumbers具有相同的價值觀查詢使用iOS的NSArray或NSMutableArray裏是合法,如果我需要在陣列上明確地迭代,並檢查是否每個int值等於值I想要測試?

這似乎工作:

NSMutableArray* walkableTiles = [NSMutableArray array];  


[walkableTiles addObject:@(1)]; 
[walkableTiles addObject:@(2)]; 
[walkableTiles addObject:@(3)]; 


if([walkableTiles containsObject:@(1)]) 
{ 
    DLog(@"contains 1"); //test passes 
} 
if([walkableTiles containsObject:[NSNumber numberWithFloat:2.0]]) 
{ 
    DLog(@"contains 2");//test passes 
} 
if([walkableTiles containsObject:[NSNumber numberWithInt:3]]) 
{ 
    DLog(@"contains 3");//test passes 
} 
+0

你是什麼意思*法律*?我很確定'containsObject:'在某個點迭代了數組。 – dandan78

+1

你讀過containsObject的規範嗎? 「此方法通過向每個數組對象發送isEqual:消息(並將anObject作爲參數傳遞給每個isEqual:消息)來確定數組中是否存在anObject。」 –

+0

而不是NSNumber numberWithint:您可以使用文字和使用@(3) –

回答

16

你在做什麼是好的。爲什麼不呢?

containsObject:方法實際上迭代整個數組,並調用每個對象中的isEqual:方法傳入正在檢查的對象。

順便說一句 - 這裏沒有什麼特別的關於使用NSNumber。這與任何對象類型的數組都是一樣的。只要對象的類有一個有效的方法,它就可以工作。

2

Apple's NSNumber documentation,你應該使用isEqualToNumber

isEqualToNumber:返回一個布爾值,指示 接收器和一個給定數量是否相等。 (BOOL)isEqualToNumber:(NSNumber *)aNumber

+0

但isEqual將工作得很好。它不是那麼緊密的類型。 –

+0

(NSNumber符合NSObject,其中isEqual已定義。) –

相關問題