使用CGSize的typedef枚举?

时间:2014-03-02 09:13:32

标签: ios objective-c enums

我有不同的页面大小。我想使用枚举来选择页面大小。想一想那样

 typedef NS_ENUM(CGSize, SizeType) {
    MAXSIZE=CGSizeMake(640, 1196),
    MIDIUMSIZE=CGSizeMake(320, 590),
    MINSIZE=CGSizeMake(160, 280)
};
它有可能吗?如果没有,那么最好的方法是我在整个应用程序中需要这个组合值

4 个答案:

答案 0 :(得分:5)

C中的enum(因此在Objective-C中)是一组整数值,这就是为什么你不能将CGSize值作为其成员的原因。

相反,使用常量。最好的选择是看看Apple做了什么并模仿它。 如果你看一下CGGeometry.h,你会发现各种常数的定义。

例如,CGSizeZero定义为

CG_EXTERN const CGSize CGSizeZero
  CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);

然后,您可以通过在标题中声明一个常量

来执行类似的操作
CG_EXTERN const CGSize kMaxSize;

然后在实现中定义它

const CGSize kMaxSize = (CGSize){ 640, 1196 };

作为奖励,您还可以为CGSize定义类型同义词,例如:

typedef CGSize MySizeType;

然后用它来声明常量和变量,例如

CG_EXTERN const MySizeType kMaxSize;
...
@property (nonatomic) MySizeType aSize;

从技术角度来看,这并没有改变,但它在语义上更好,它基本上实现了typedef enum的相同目的(这恰恰为int提供了方便的同义词)

答案 1 :(得分:3)

根据其他答案,枚举基本上是整数,而不是结构。

您只需#define常量文件中的值:

#define MAXSIZE CGSizeMake(640, 1196)
#define MIDIUMSIZE CGSizeMake(320, 590)
#define MINSIZE CGSizeMake(160, 280)

虽然您可能希望重命名它们,以便更轻松地使用助记符,可读性和自动完成功能,例如:

#define PURPOSE_SIZE_MAX ...
#define PURPOSE_SIZE_MED ...
...

答案 2 :(得分:2)

你做不到。 枚举类型是C类型,它必须是整数类型,每个成员也必须是相同的类型。 您可以使用char,BOOL,int,uint,NSInteger等。

对于常量浮点值,您需要逐个声明它们。

结构也需要逐个完成。

答案 3 :(得分:2)

你不能使用枚举。在Objective C中,enum继承自C。因此它被隐式转换为int。