面试题答案
一键面试传统enum类型声明方式
- 语法结构:
enum枚举名 {枚举常量1, 枚举常量2, ...};
,例如:
enum Direction { DirectionNorth, DirectionSouth, DirectionEast, DirectionWest };
- 这里
Direction
是枚举名,DirectionNorth
等是枚举常量,默认从0开始依次递增1。也可以手动指定值,如:
enum Number { NumberOne = 1, NumberTwo, NumberThree = 5 };
- 这里
NumberOne
值为1,NumberTwo
值为2(因为默认递增1),NumberThree
值为5 。
- 使用示例:
enum Direction myDirection = DirectionEast; if (myDirection == DirectionEast) { NSLog(@"朝东"); }
NS_ENUM宏定义方式
- 语法结构:
NS_ENUM(类型, 枚举名) {枚举常量1, 枚举常量2, ...};
,例如:
typedef NS_ENUM(NSInteger, Weekday) { WeekdayMonday, WeekdayTuesday, WeekdayWednesday, WeekdayThursday, WeekdayFriday, WeekdaySaturday, WeekdaySunday };
NS_ENUM
第一个参数指定枚举常量的底层存储类型(这里是NSInteger
),第二个参数是枚举名,后面花括号内是枚举常量。同样默认从0开始递增1,也可手动指定值。
- 使用示例:
Weekday today = WeekdayTuesday; if (today == WeekdayTuesday) { NSLog(@"今天是周二"); }
不同之处总结
- 类型指定:传统
enum
没有显式指定底层存储类型,依赖编译器自动推断;NS_ENUM
宏显式指定底层存储类型,提高了代码的可移植性和安全性。 - 作用域和类型安全:传统
enum
在C语言基础上,作用域较窄,不同枚举类型之间在比较等操作时可能会有潜在问题;NS_ENUM
结合typedef
定义了一个新的类型,有更好的类型安全性和作用域管理,在现代Objective - C开发中更推荐使用。