NSParameterAssert и BOOLs - PullRequest
       1

NSParameterAssert и BOOLs

1 голос
/ 31 августа 2011

У меня есть метод, который принимает параметр BOOL, и я хочу убедиться, что он не равен nil в вызове.

-(void)setNetworkFilterWithName:(NSString *)nameOfFilter toState:(BOOL)newState 

Я не могу использовать NSParameterAssert(newState);, потому что он будет утверждать, когдаBOOL - ложь.

Итак, я делаю это:

NSParameterAssert((newState == true) || (newState == false));

Есть ли более элегантный способ проверить это?

Ответы [ 2 ]

3 голосов
/ 31 августа 2011

A BOOL - это тип значения, а не указатель, поэтому он не может быть NULL.Это будет только ложь, которая равна нулю, или не ложь, которая не равна нулю.Не нужно проверять его.

Редактировать: Если вы хотите проверить и убедиться, что BOOL равен YES или NO, что может оказаться полезным, особенно в ситуациях, когдаNSNumber случайно передается, что всегда будет иметь значение true, если оно не равно nil.

NSParameterAssert (! newState || newState == YES);

2 голосов
/ 31 августа 2011

BOOL - это просто целое число;в нем нет понятия «недопустимо» или «не установлено», то есть у объектов ноль.0 ложно, а все остальное верно.Написанный вами параметр assert не может выдать assert: ((newState == YES) || (newState == NO)) всегда true.Вы не можете делать то, что вы хотите, используя BOOL.Вы можете преобразовать в использование NSNumber, который, как тип объекта, позволяет передать nil и проверить его.

РЕДАКТИРОВАТЬ: Я неверно оцениваю выражение ((newState == YES)|| (newState == NO));если вы находитесь за пределами диапазона, предоставленного YES и NO (то есть newState является чем-то отличным от 0 или 1), тогда пока он оценивается как "true" или "false" в смысле C, он будет not быть равно ДА или НЕТ.(newState ||! newState) всегда истинно в C, но ((newState == YES) || (newState == NO)) только всегда верно, если вы можете быть уверены, что newState содержит значения YES или NO и никаких других.Спасибо Джо за указание на ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...