Intereting Posts
ios sortedArrayUsingComparator, но сохраняя некоторые значения всегда в начале Как вернуть одно значение с крайними случаями в Swift? Блокировка Xcode IOS Некоторая ориентация на портрет, а некоторые – на пейзаж Какой шаблон архитектуры iOS лучше оптимизировать код. Может ли кто-нибудь объяснить? Swift: deinit не вызывает действие кнопки «Назад» Xamarin.iOS Новый проект (Single View, Master-Detail) сбой на симуляторе, работает на устройстве UITableViewCell не анимирует содержимое после reloadSections с анимацией В ARC как дочерний объект сообщает родительскому объекту, что я сделан, пожалуйста, отпустите меня (чтобы избежать утечек памяти) 'NSFastEnumerationIterator.Element' (aka 'Any') не имеет членов индекса error swift 3 iCloud и веб-приложение Swift – Trim String в массиве Создание эпохи в быстром Есть ли способ быстро изменить отдельные значения цвета в изображении? Как увеличить размер UITextView и высоту UIToolBar для приложения iPhone для iPhone? Как изменить формат текстуры в наборе спрайтов?

Использование NSArray для сравнения типов C-типа

Я хотел бы перебирать NSArray из int и сравнивать каждый с конкретным int. Все int – это int int.

Код, который я использую, выглядит следующим образом:

-(int)ladderCalc: (NSArray*)amounts: (int)amount { int result; for (NSUInteger i=0; i< [amounts count]; i++) { if (amount < [amounts objectAtIndex:i]); { // do something } // do something } } 

Однако при сравнении значения int с результатом [amounts objectAtIndex:i] я получаю ошибку, потому что вы не можете сравнивать id с int. Почему идентификатор задействован в этом случае? Не следует ли objectAtIndex просто возвращать объект по указанному индексу? Возможно ли вернуть объект, возвращенный в C int, а затем выполнить сравнение?

Или я должен просто отказаться от NSArray и делать это в C?

Вам не хватает вызова intValue (предполагается, что ваш массив содержит экземпляры NSNumber , что справедливо, чтобы предположить).

Также ради производительности вы, вероятно, захотите вызвать [amounts count] только один раз, например:

 -(int)ladderCalc:(NSArray *)amounts:(int)amount { int result; NSUInteger amountCount = [amounts count]; for (NSUInteger i = 0; i < amountCount; i++) { if (amount < [[amounts objectAtIndex:i] intValue]); { // do something } // do something } } 

И вот еще быстрее благодаря (оптимизированному) быстрому перечислению:

 -(int)ladderCalc:(NSArray *)amounts:(int)amount { int result; for (NSNumber *amount in amounts) { if (amount < [amount intValue]) { // do something } // do something } } 

И тот, который даже быстрее предыдущего, благодаря параллельному исполнению:

 -(int)ladderCalc:(NSArray *)amounts:(int)amount { int result; [amounts enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSNumber *amount, NSUInteger idx, BOOL *stop) { if (amount < [amount intValue]) { // do something } // do something }]; } 

Осторожно: последняя версия требует, чтобы ваш // do something s НЕ зависимым друг от друга из-за параллелизма.

NSArray – это массив, содержащий объекты, а не примитивные типы. Чтобы положить целые числа C в массив, вы обычно обертываете их в экземплярах класса NSNumber. NSArray затем будет содержать объекты NSNumber, из которых вы можете легко получить примитивные значения, используя метод intValue, поскольку @Regexident демонстрирует другой опубликованный ответ.