// The semicolons at the end of these declarations are not superfluous. typedef NS_ENUM(NSUInteger, MyEnum) {MyValue1, MyValue2, MyValue3}; typedef NS_OPTIONS(NSUInteger, MyBitmask) {MyBit1, MyBit2, MyBit3}; // NS_ENUM specifies the type and name of the enum. typedef enum { MyValue1, MyValue2, MyValue3 } MyEnum; typedef NS_ENUM(NSUInteger, MyEnum) { MyValue1, MyValue2, MyValue3 }; // NS_OPTIONS is equivalent to NS_ENUM, but semantically used for bitmask enums. typedef enum { MyBit1 = (1u << 0), MyBit2Longer = (1u << 1), MyBit3ThatIsConsiderablyMoreVerbose = (1u << 2) } MyBitmask; typedef NS_OPTIONS(NSUInteger, MyBitmask) { MyBit1 = (1u << 0), MyBit2Longer = (1u << 1), MyBit3ThatIsConsiderablyMoreVerbose = (1u << 2) };