2010-09-04 17 views
1

Ok donc je l'ai défini ma classe DSNavigationManager et il a une propriété appelée DSNavigationManagerStyle managerStyle:iPhone opérateurs

 

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; 

 

Je viens d'apprendre comment utiliser décalant sage peu, mais je ne sais pas comment recevoir ces informations. Je veux faire quelque chose un peu comme:

 


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 

} 


 

Répondre

2
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 
} 

& est le niveau du bit opérateur. Vous devriez lire l'article Wikipedia sur Bitwise operation.

1

Pour vérifier la présence d'un bit particulier, utilisez le bitwise et, & (à ne pas confondre avec &&, la logique et). Par exemple,

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

Si vous utilisez cette valeur où il sera jeté en booléen, une valeur non nulle est considéré comme « vrai », qui fait des tests comme ce facile à lire:

if (managerStyle & DSNavigationManagerStyleDefaultToolBar) { 
    ... 
} 

Mais ce test ne fonctionnera pas bien avec vos valeurs composées - par exemple, et un bitfield avec DSNavigationManagerStyleDefault retournera 'vrai' si l'un de ses bits est activé.

Si vous voulez vraiment utiliser bitfields, vous accoutumer à tous les opérateurs au niveau du bit: http://developer.apple.com/tools/mpw-tools/commandref/appc_logical.html