2013-10-09 2 views
5

Люди, я пытаюсь сделать следующее. У меня есть массив (NSArray) под названием «» specialLevels, что массив выглядит следующим образом:Objective-C проверяет, содержит ли массив с int int

specialLevels = @[@2, @4, @6, @9]; 

Это должно быть массив Int-х. Я также получил int 'currentLevel' (базовый int no object).

И я хочу проверить, находится ли currentLevel в массиве specialLevels. Я знаю, что метод содержит containsbject, но это не будет работать в моем случае.

Что вы, ребята, рекомендуете делать в этом случае?

Так я эта мысль, но он чувствует себя любопытным странно им:

if ([specialLevels containsObject:[NSNumber numberWithInt:currentLevel]]) { 
// other code in here 
} 
+8

В чем проблема? Вам не нравится строка кода? – Wain

ответ

11

specialLevels не является массивом ints. Это массив объектов NSNumber. @ 2, @ 4, @ 6, @ 8 каждый создает экземпляр NSNumber, эквивалентный вызову [[NSNumber numberWithInt: value]. Когда вы вызываете containsObject, вам также необходимо передать объект NSNumber, чтобы containsObject мог соответствовать значению (используя isEqual :).

Вы можете прочитать о Objective-C literals here.

+0

Спасибо за это объяснение! :) – ronnyrr

16

Вы можете альтернативно написать:

if ([specialLevels containsObject:@(currentLevel)]) { 
    // other code in here 
} 

, который больше в соответствии со стилем вашего другого кода.

+0

Удивительный, действительно спасибо! Но как это справедливо, любая документация об этом? – ronnyrr

+2

Вы поняли, что делали '@ 2', прежде чем вы начали его использовать? Ответ от @BrianWalker - хороший обзор. – Wain

+0

Нет, я этого не сделал, но теперь я это сделаю, спасибо за это объяснение! Очистить для меня сейчас :) – ronnyrr

Смежные вопросы