使用CGSize的typedef枚举?

Sun*_*hah 1 enums objective-c ios

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

 typedef NS_ENUM(CGSize, SizeType) {
    MAXSIZE=CGSizeMake(640, 1196),
    MIDIUMSIZE=CGSizeMake(320, 590),
    MINSIZE=CGSizeMake(160, 280)
};
Run Code Online (Sandbox Code Playgroud)

这是可能的?如果没有,那么最好的方法是什么,我需要在我的整个应用程序中使用这个组合值

Gab*_*lla 5

一个enum在C(并因此在Objective-C)是一组整数值的,这就是为什么你不能有CGSize值作为它的成员.

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

例如,CGSizeZero定义为

CG_EXTERN const CGSize CGSizeZero
  CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过在标头中声明一个常量来执行类似的操作

CG_EXTERN const CGSize kMaxSize;
Run Code Online (Sandbox Code Playgroud)

然后在实现中定义它

const CGSize kMaxSize = (CGSize){ 640, 1196 };
Run Code Online (Sandbox Code Playgroud)

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

typedef CGSize MySizeType;
Run Code Online (Sandbox Code Playgroud)

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

CG_EXTERN const MySizeType kMaxSize;
...
@property (nonatomic) MySizeType aSize;
Run Code Online (Sandbox Code Playgroud)

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