Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有CGSize的typedef枚举?_Ios_Objective C_Enums - Fatal编程技术网

Ios 带有CGSize的typedef枚举?

Ios 带有CGSize的typedef枚举?,ios,objective-c,enums,Ios,Objective C,Enums,我有不同大小的页面。我想使用枚举来选择页面的大小。有人这么想 typedef NS_ENUM(CGSize, SizeType) { MAXSIZE=CGSizeMake(640, 1196), MIDIUMSIZE=CGSizeMake(320, 590), MINSIZE=CGSizeMake(160, 280) }; 有可能吗?如果没有,那么最好的方法是什么?我需要在我的整个应用程序中使用这个组合值。 枚举类型是C类型,必须是整数类型,每个成员也必须是相同的类型

我有不同大小的页面。我想使用枚举来选择页面的大小。有人这么想

 typedef NS_ENUM(CGSize, SizeType) {
    MAXSIZE=CGSizeMake(640, 1196),
    MIDIUMSIZE=CGSizeMake(320, 590),
    MINSIZE=CGSizeMake(160, 280)
};
有可能吗?如果没有,那么最好的方法是什么?我需要在我的整个应用程序中使用这个组合值。 枚举类型是C类型,必须是整数类型,每个成员也必须是相同的类型。 您可以使用char、BOOL、int、uint、NSInteger等

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

结构也需要逐个完成

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

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


结构也需要逐个完成

您不能对此使用枚举。在目标C中,枚举是从C继承的。因此它被隐式转换为int。

您不能为此使用枚举。在Objective C中,枚举是从C继承的。因此它隐式转换为int。

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

您可以在常量文件中定义值:

#define MAXSIZE CGSizeMake(640, 1196)
#define MIDIUMSIZE CGSizeMake(320, 590)
#define MINSIZE CGSizeMake(160, 280)
尽管为了便于记忆、可读性和自动完成,您可能希望重命名它们,例如:

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

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

您可以在常量文件中定义值:

#define MAXSIZE CGSizeMake(640, 1196)
#define MIDIUMSIZE CGSizeMake(320, 590)
#define MINSIZE CGSizeMake(160, 280)
尽管为了便于记忆、可读性和自动完成,您可能希望重命名它们,例如:

#define PURPOSE_SIZE_MAX ...
#define PURPOSE_SIZE_MED ...
...
C和Objective-C中的枚举是一组整数值,这就是为什么不能将CGSize值作为它的成员

相反,使用常量。最好的选择是看看苹果做了什么并模仿它。 如果你看一看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枚举的相同目的,它正好为int提供了一个方便的同义词,C中的枚举因此在Objective-C中是一组整数值,这就是为什么不能将CGSize值作为它的成员

相反,使用常量。最好的选择是看看苹果做了什么并模仿它。 如果你看一看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枚举的相同目的,它正好为int提供了一个方便的同义词。。你能告诉我最好的方法吗。。我不想一个接一个地使用。在我的整个应用程序中,它需要一个常量文件。或者将其添加到pch文件中。好的。。你能告诉我最好的方法吗。。我不想一个接一个地使用。在我的整个应用程序中,它需要一个常量文件。或者将其添加到您的pch文件中。根据我的经验,我会尽可能避免定义。因为您丢失了部分类型信息,所以调试它们是一个噩梦。“为什么不干脆用一个const呢?”加布里埃佩特罗内拉,基本上是简洁的。很明显,这两种方法都有效,所以这部分是个人偏好。常量定义比定义长4个字符。我不会说这是一个巨大的胜利,特别是考虑到你为此付出的代价。C中的常量变量被分配了内存,在很多地方它不能用作常量。最重要的是,编译器必须假设值可以更改,而不是根据它进行优化。想重新表述一下吗?根据我的经验,我会尽量避免定义。因为您丢失了部分类型信息,所以调试它们是一个噩梦。“为什么不干脆用一个const呢?”加布里埃佩特罗内拉,基本上是简洁的。很明显,这两种方法都有效,所以这部分是个人偏好。常量定义比定义长4个字符。我不会说这是一个巨大的胜利,特别是考虑到你为此付出的代价。C中的常量变量被分配了内存,在很多地方它不能用作常量。最重要的是,编译器必须假设值可以更改,而不是根据它进行优化 我们的评论。想重新表述一下吗?