Type d'annotation

Bonjour,


Je viens de tomber sur un code, et je n'ai jamais vu ce type de syntaxe.

Pouvez vous m'expliquer ce que fait:



types&UIRemoteNotificationTypeAlert

Comment appel t'on cette façon de faire? Comment ça fonctionne?


Merci d'avance.


Réponses

  • Si la question porte sur le '&' il s'agit simplement d'un opérateur ET logique bit à  bit. Le même qu'en C


  • AliGatorAliGator Membre, Modérateur
    décembre 2014 modifié #3
    C'est simplement un ET logique bit à  bits ("bitwise AND" en anglais).

    Ca permet de faire des masques bits à  bits. C'est d'ailleurs spécifiquement pour cela que les enums de type NS_OPTIONS ont des valeurs numériques disjointes bits à  bits, chaque valeur du NS_OPTIONS n'ayant qu'un seul bit à  1 et les autres à  0 (valeurs 1<<0, 1<<1, 1<<2, ...), pour pouvoir facilement utiliser ces opérateurs ensuite pour savoir quels flags sont actifs.

    http://en.wikipedia.org/wiki/Bitwise_operation
  • Ok, donc on peut dire:



    NSInteger myFirstValue = 1;
    NSInteger anotherValue = 2;
    NSInteger value = myFirstValue;

    if (value&myFirstValue) {
    NSLog("Hello world");
    }

    La théoriquement, mon log s'affiche? Non?


  • jpimbertjpimbert Membre
    décembre 2014 modifié #5

    Oui ça marche parfaitement, surtout avec une '@' avant "Hello world".


  • Joanna CarterJoanna Carter Membre, Modérateur

    Presque. Mais comme Ali, je l'utiliserais plutôt pour les "bit masks"



    typedef NS_OPTIONS(NSUInteger, SidMethodOptions)
    {
    SidMethodOptionClimbOneEngine = 1 << 0,
    SidMethodOptionClimbAllEngines = 1 << 1,
    SidMethodOptionTreatAsObstacle = 1 << 2,
    SidMethodOptionSimpleGradient = 1 << 3,
    SidMethodOptionsOldStyle = SidMethodOptionTreatAsObstacle | SidMethodOptionSimpleGradient,
    SidMethodOptionsNewStyle = SidMethodOptionClimbOneEngine | SidMethodOptionClimbAllEngines | SidMethodOptionTreatAsObstacle | SidMethodOptionSimpleGradient
    };

    Puis on peut tester la "participation" d'un "membre" :



    {
    SidMethodOptions options = SidMethodOptionsNewStyle;

    if (options & SidMethodOptionClimbOneEngine)
    {
    // options inclut SidMethodOptionClimbOneEngine
    }


    Notes que j'ai mis les espaces entre l'opérateur et ses opérandes pour améliorer la lisibilité




  • Oui ça marche parfaitement, surtout avec une '@' avant "Hello world".




     Tu chipotes :P 


     


    Merci Johanna, je vais essayer d'intégrer cette façon de faire prochainement ^^

  • Joanna CarterJoanna Carter Membre, Modérateur


    Merci Johanna...




     


    Maintenant, c'est moi qui chipote - c'est Joanna il n'y a pas de 'h' 



  • Maintenant, c'est moi qui chipote - c'est Joanna il n'y a pas de 'h' 




    J'étais ailleurs, Merci Joana :p


     


    Merci Joanna

Connectez-vous ou Inscrivez-vous pour répondre.