2016-11-17 105 views
0

我创造了这样的为什么Objective-C的NS_ENUM变量自动拥有默认值

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

枚举,创建这样

PermissionStages PermissionStageVar; 

可变我没有任何值分配给它,而是通过默认为variablePermissionStages enum第一个值,在这种情况下它的thePermissionNotDetermine

为什么这种行为?

+0

这是枚举的默认行为。你知道在计算机科学中0与现实世界相比是一个有意义的价值。您最好为受到破坏的案件指定一个-1的值。 – Adeel

+0

根据创建变量的位置,初始值可能会有所不同。局部变量不会自动默认为0. – dan

回答

2

行:

PermissionStages PermissionStageVar; 

越来越的0的默认值。这类似于行:导致foo具有nil初始值

NSString *foo; 

。或

BOOL aBool; 

导致aBool具有NO的初始值。

变量都被初始化为“0”的值。

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

+0

是否有任何方式来初始化PermissionStageVar与其他一些默认值,除了这些,而我没有在代码中使用接受指定为默认值? –

+0

'PermissionStages PermissionStageVar =(PermissionStages)-1;'将会强制它达到其他值。我不推荐它。枚举应该只引用实际的有效值。 – rmaddy

+0

非常感谢:) –