typedef NS_ENUM vs typedef enum

后端 未结 2 1887
暗喜
暗喜 2021-02-07 10:48

On the Adopting Modern Objective-C guide, Apple recommends using the NS_ENUM macro instead of enum. I\'ve also read an explanation from NSHipster about NS_ENUM and NS_OPTIONS.

相关标签:
2条回答
  • 2021-02-07 11:08

    NS_ENUM allows you to define a type. This means that the compiler can check if you're assigning the enum to a different variable like so:

    //OK in both cases
    NSInteger integer = SizeWidth;
    //OK only with typedef
    BOOL value = SizeHeight;
    

    NS_ENUM also provides checks in switch statements that you've covered all possible values:

    //Will generate warning if using NS_ENUM
    switch(sizeVariable) {
        case SizeWidth:
            //Do something
    }
    
    0 讨论(0)
  • 2021-02-07 11:10

    First, NS_ENUM uses a new feature of the C language where you can specify the underlying type for an enum. In this case, the underlying type for the enum is NSInteger (in plain C it would be whatever the compiler decides, char, short, or even a 24 bit integer if the compiler feels like it).

    Second, the compiler specifically recognises the NS_ENUM macro, so it knows that you have an enum with values that shouldn't be combined like flags, the debugger knows what's going on, and the enum can be translated to Swift automatically.

    0 讨论(0)
提交回复
热议问题