Операторы iPhone - PullRequest
       1

Операторы iPhone

1 голос
/ 05 сентября 2010

Хорошо, я определил свой класс DSNavigationManager, и у него есть свойство с именем DSNavigationManagerStyle managerStyle:


typedef enum {
    DSNavigationManagerStyleNone                        = 0,
    DSNavigationManagerStyleDefaultNavigationBar        = 1 << 0,
    DSNavigationManagerStyleDefaultToolBar              = 1 << 1,
    DSNavigationManagerStyleDefault                     =
        DSNavigationManagerStyleDefaultNavigationBar + 
        DSNavigationManagerStyleDefaultToolBar,
    DSNavigationManagerStyleInteractiveNavigationBar    = 1 << 2,
    DSNavigationManagerStyleInteractiveToolBar          = 1 << 3,
    DSNavigationManagerStyleInteractiveWithDarkPanel    = 1 << 4,
    DSNavigationManagerStyleInteractiveWithBackButton   = 1 << 5,
    DSNavigationManagerStyleInteractiveWithTitleBar     = 1 << 6,
    DSNavigationManagerStyleInteractiveDefault          = 
        DSNavigationManagerStyleInteractiveNavigationBar + 
        DSNavigationManagerStyleInteractiveToolBar + 
        DSNavigationManagerStyleInteractiveWithDarkPanel + 
        DSNavigationManagerStyleInteractiveWithBackButton + 
        DSNavigationManagerStyleInteractiveWithTitleBar,
} DSNavigationManagerStyle;


Я только что узнал, как использовать побитовое смещение, но не знаю, как его получитьИнформация.Я хочу сделать что-то вроде:



DSNavigationManagerStyle managerStyle = DSNavigationManagerStyleDefault;

if(managerStyle "Has The DefaultNavigationBar bit or the DefaultToolBarBit") {
  // Implement
}
else {
    if(managerStyle "Has the InteractiveNavigationBar bit") {
        // Implement
    }
    if(managerStyle "Has the InteractiveToolBar bit") {
        // Implement
    }
    //.... and so on so that technically the object can implement all 
    //  styles, no styles, or any number of styles in between

}




Ответы [ 2 ]

2 голосов
/ 05 сентября 2010
if (managerStyle & DSNavigationManagerStyleDefaultNavigationBar || managerStyle & DSNavigationManagerStyleDefaultToolBarBit) {
    // Implement
} else if (managerStyle & DSNavigationManagerStyleInteractiveNavigationBar) {
    // Implement
} else if (managerStyle & DSNavigationManagerStyleInteractiveToolBar) {
    // Implement
}
    //.... and so on so that technically the object can implement all 
    //  styles, no styles, or any number of styles in between
}

& - побитовый оператор AND. Вы должны прочитать статью в Википедии о Побитовая операция .

1 голос
/ 05 сентября 2010

Чтобы проверить наличие определенного бита, используйте побитовые и & (не путать с &&, логические и).Например,

  01101101
& 00001000
----------
  00001000

Если вы используете это значение там, где оно будет приведено к логическому значению, любое ненулевое значение будет считаться «истинным», что упрощает чтение таких тестов:

if (managerStyle & DSNavigationManagerStyleDefaultToolBar) {
  ...
}

Но этот тест не будет хорошо работать с вашими составными значениями - например, если задать битовое поле с DSNavigationManagerStyleDefault, будет возвращено значение «истина», если установлен любой из его компонентных битов.

Если вы действительнохотите использовать битовые поля, приучите себя ко всем битовым операторам: http://developer.apple.com/tools/mpw-tools/commandref/appc_logical.html

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