【问题标题】:Why objective-c NS_ENUM variable automatically have default value为什么objective-c NS_ENUM 变量自动具有默认值
【发布时间】:2017-04-01 06:08:45
【问题描述】:

我创建了一个这样的枚举

typedef NS_ENUM(NSInteger, PermissionStages) {
    thePermissionNotDetermine = 0,
    thePermissionDenied = 1,
    theReminderPermissionAllowed = 2,
};

并像这样创建一个变量

PermissionStages PermissionStageVar;

我没有为其分配任何值,但默认情况下,此 variable 具有 PermissionStages enum 第一个值,在本例中为 thePermissionNotDetermine

为什么会这样?

【问题讨论】:

  • 这是枚举的默认行为。你知道在计算机科学中 0 与现实世界相比是一个有意义的值。您最好将值 -1 分配给被破坏的案例。
  • 初始值可能会有所不同,具体取决于您创建该变量的位置。局部变量不会自动默认为 0。

标签: ios objective-c enums


【解决方案1】:

行:

PermissionStages PermissionStageVar;

正在获取默认值0。这类似于以下行:

NSString *foo;

导致foo 的初始值为nil。或者

BOOL aBool;

导致aBool 的初始值为NO

变量全部初始化为“0”值。

由于您的枚举恰好具有0 的值,因此您的变量似乎是用thePermissionNotDetermine 初始化的。

【讨论】:

  • 有什么方法可以用除这些之外的其他默认值初始化 PermissionStageVar,而且我在代码中不使用这些默认值吗?
  • PermissionStages PermissionStageVar = (PermissionStages)-1; 将是一种将其强制为其他值的方法。我不推荐它。枚举应该只引用实际的有效值。
  • 局部变量未初始化为 0,objective-c 对象引用除外。因此,如果您的本地 BOOL 的初始值为 NO,那只是一个快乐的意外。见stackoverflow.com/questions/10022025/…
猜你喜欢
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
相关资源
最近更新 更多