Каков правильный способ подсчета количества элементов NSArray с помощью STAssertEquals для NSArray.STAssertEquals для проверки количества NSArray - чистый путь
Вслед за Ожидалось работать:
...
STAssertEquals(1, [myArray count], @"One item should be in array");
Этот код выдает «Несоответствие типа» ошибка во время выполнения при запуске теста.
Вместо этого я должен сделать явное приведение к NSUInteger:
STAssertEquals((NSUInteger)1, [myArray count], @"One item should be in array");
Это работает - но выглядит вроде уродливой из-за явное приведение.
Я также хочу избежать использования STAssertTrue, потому что STAssertEquals выглядит более подходящим (мы сравниваем два значения) и показывает фактические и ожидаемые значения.
Что такое правильный способ проверить его в Objective-C?
UPDATE 1
Спасибо за ответы предложил использовать 1u, как беззнаковое INT буквальным
STAssertEquals(1u, [myArray count], @"One item should be in array");
Но, как упоминалось @Aaron это еще некрасиво - я хотел бы использовать "1" прямо - думая об использовании myArray.count == 1 вместо этого сейчас. И причина этого в том, что 1u не выглядит очень чистым. 1 для меня 1. Вы никогда не пишете 1u в математике :-) Любые другие предложения?
UPDATE 2
Как @ H2CO3 упоминались 1u даже не всегда может работать и как предложено в какой-то теме мы могли бы использовать более декларативное определение ожидаемого значения, которое позволит решить проблему литья:
NSUInteger expectedItemsCount = 1;
STAssertEquals(expectedItemsCount, [myArray count], @"One item should be in array");
Я предпочитаю его 1u-решение, потому что он выглядит чище. Но минусы этого подхода состоят в том, что у нас есть дополнительная строка и код не очень компактный. Итак, похоже, нам нужно выбирать между двумя подходами: (NSUInteger)1
и NSUInteger expectedItemsCount = 1;
Интересно, это означает, что вы включили флаг 'CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION', сделали ли вы это (или кто-то из проекта) или обновили последнее обновление Xcode? Я думал, что это по умолчанию. – Pascal
@Pascal OP не получает предупреждение о компиляторе - он получает ошибку ** runtime **. – 2013-03-24 15:54:10
@ H2CO3 О, святой ...! – Pascal