CGSizeMake不适用于常量

Dan*_*ark 14 objective-c

有没有办法做这种事情?

static const CGSize maxPageSize = CGSizeMake(460, 651);
Run Code Online (Sandbox Code Playgroud)

这是非法的,因为"Initializer元素不是编译时常量".

当然,我可以使用单独的花车,但我想知道是否有办法做到这一点.

Mat*_*ing 47

因为CGSize它只是一个简单的C结构:

struct CGSize {
  CGFloat width;
  CGFloat height;
};
typedef struct CGSize CGSize;
Run Code Online (Sandbox Code Playgroud)

您可以使用初始化列表:

static const CGSize maxPageSize = {460, 651};
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用_designated初始值设定项:_ static const CGSize size = {.width = 100,.height = 200}.它只会在Apple更改字段名称('width'和'height')时中断,但在这种情况下你的代码可能会破坏:)顺便说一下,它也可以就地使用struct初始化器:[someObj doSmthWithSize:(CGSize ){.width = 10,.height = 20}]. (10认同)
  • @Yar,是的,你可以.反对这样做的论点是,如果Apple改变了结构的内部布局,它就会破裂. (2认同)