如何为变量分配枚举并在以后访问其值?我认为这很简单,但每次我尝试将enum值赋给变量(Xcode中没有类型不匹配或警告出现)时,我的应用程序崩溃并出现EXC_BAD_ACCESS错误.
以下是我enum在头文件(BarTypes.h)中设置的方法:
typedef enum {
BarStyleGlossy,
BarStyleMatte,
BarStyleFlat
} BarDisplayStyle;
Run Code Online (Sandbox Code Playgroud)
没有问题(至少阅读和使用这些值).但是,当我创建一个可以存储其中一个enum值的变量(BarStyleGlossy,BarStyleMatte或BarStyleFlat)然后尝试设置该变量时,应用程序崩溃了.以下是我设置和使用变量的方法:
//Header
@property (nonatomic, assign, readwrite) BarDisplayStyle barViewDisplayStyle; //I've also tried just using (nonatomic) and I've also tried (nonatomic, assign)
//Implementation
@synthesize barViewDisplayStyle;
- (void)setupBarStyle:(BarDisplayStyle)displayStyle {
//This is where it crashes:
self.barViewDisplayStyle = displayStyle;
}
Run Code Online (Sandbox Code Playgroud)
为什么会在这里崩溃?如何将枚举的值存储在变量中?我认为这个问题与enums我最终缺乏理解有关,但如果我遵循传统的变量设置和分配等,这应该有效.关于我做错了什么的任何想法?
请注意我是enums的新手,所以我的词汇可能有些混乱(原谅我 - 如果你知道我想说的话,可以自由编辑).
我发现了一些关于enums网络的参考文献:
如果我想实现以下代码,枚举是否合适?我在枚举上查了几个问题,但我还是有点不确定.
if (dayOfWeek == Monday)
{
// Do something
}
else if (dayOfWeek == Tuesday || dayOfWeek == Wednesday)
{
// Do something else
}
Run Code Online (Sandbox Code Playgroud)
如果这看似正确,我将如何初始化枚举?它会进入标题或实现文件吗?
可能重复:
目标C方法签名是否可以指定枚举类型?
"VoiceName"是一个枚举,声明如下:
enum VoiceName {
PAD_RHYTHM,
PAD_RHYTHM2,
PAD_RHYTHM3,
PEEPERS,
ATMOSPHERE,
IMPULSE,
FAST_PULSE,
HAIRYBALLS_PADS,
KICK
};
Run Code Online (Sandbox Code Playgroud)
编译器似乎不喜欢我在这样的方法签名中使用它:
-(void)pulseFiredWithSamplePosition:(float)position from: (VoiceName) voiceName;
Run Code Online (Sandbox Code Playgroud)
它在"VoiceName"之前告诉我预期')'.这里发生了什么?
我只想弄清楚值本身是否为int,unsigned int,NSInteger.我以为我看到有人说他们是无符号的整数,但在Apple的头文件中,我看到它们用来存储负值.
C语言中有以下几点有什么区别:
typedef enum month_t
{
jan,
feb,
march
}month;
Run Code Online (Sandbox Code Playgroud)
和
typedef enum
{
monday,
tuesday,
wednesday
}day;
Run Code Online (Sandbox Code Playgroud)
在发布这个问题之前,我读到了:Objective-C中的typedef枚举是什么?
但是不太了解......