Способы указать BOOL обертку? - PullRequest
       19

Способы указать BOOL обертку?

1 голос
/ 06 августа 2009

В Objective-C, есть ли способы указать, что NSNumber * действительно должен быть BOOL? Прямо сейчас мой код выглядит так:

NSNumber *audio; // BOOL wrapper

Без комментария не сразу очевидно, что * audio является логическим значением.

Моей первой мыслью было попробовать

typedef NSNumber* BOOL;

но это дало ошибку компилятора, очевидно, потому что typedef не понимает Objective-C.

Без изменения имен переменных (что сложно при использовании существующих API), как мне указать, что NSNumber * содержит логическое значение?

Ответы [ 3 ]

2 голосов
/ 06 августа 2009

код:

typedef NSNumber* BOOL;

не компилируется, потому что BOOL уже является typedef, и ему не разрешено переопределять typedef.

Таким образом, вы можете использовать другое имя для этого типа, например ::

typedef NSNumber NSNumberBool;
NSNumberBool *audio;

Или, возможно, лучше назвать переменную так, чтобы вы знали, что это NSNumber и содержит логическое значение, поэтому вам даже не нужно искать тип переменной:

NSNumber *audioNumberBool;
...
[audioNumberBool boolValue];
1 голос
/ 06 августа 2009

Очевидно, что лучшее решение - переименовать свойство в что-то вроде isAudio или hasAudio. Но если вы не можете сделать это, то посредственным решением является typedef, как вы описали. Описанная вами typedef не работает, потому что BOOL уже определен в Objective C в objc.h:

typedef signed char BOOL; 

, кроме того, это может сбить с толку, поскольку это не означает, что это фактически NSNumber, а не просто bool / int. Я бы предложил что-то вроде:

typedef NSNumber NSNumberBool;

или, возможно, в этом случае лучше было бы:

#define NSNumberBool NSNumber

и затем используйте:

NSNumberBool *audio;

Или просто используйте комментарий, как вы сделали.

0 голосов
/ 06 августа 2009

Лучшим способом было бы вызвать переменную audioBool или что-то, что означает логическое значение. Комментарии хороши и все, но иногда их можно пропустить или просто не прочитать.

Если у вас есть проблема с переименованием многих переменных, вы можете использовать инструмент рефакторинга XCode. Просто щелкните правой кнопкой мыши (или cmd + click) по имени переменной, выберите опцию Refactor ... и затем переименуйте переменную. Нажмите Preview, и Xcode покажет вам, что он собирается изменить. Если вам нравится то, что вы видите, подайте заявку и, если нет, отмените.

Xcode также даст вам возможность сделать снимок перед принятием операции рефакторинга. Это включено по умолчанию. Так что, если что-то пойдет не так, вы можете просто откатиться назад.

...