2015-06-03 42 views
0

为什么在使用三元运算符来分配像这样的CGSize常量时会出现编译器错误?三元运算符是否在常量定义中工作?

CGSize const ksizeSmall = SOME_BOOLEAN_VARIABLE ? {187, 187} : {206, 206}; 

它确实像这样的工作...

CGSize const ksizeSmall = {187, 187}; 

不过,我想添加一个布尔表达式来评估我是否应该使用一个尺寸与其他尺寸。我不想使用if/else,因为我有一长串CGSize专门用于不同的目的。

+2

SOME_BOOLEAN_VARIABLE是编译时常量吗? – dasblinkenlight

+0

编译器错误说的是什么? –

+0

SOME_BOOLEAN_VARIABLE是一个评估为“bool”的宏 – jcpennypincher

回答

3

{187, 187}{206, 206}聚集是作为一个初始化表达式有效,但不是作为一个通用的表达式*。这就是三元运营商不允许它的原因。

如果您做一个初始化的局部常量,你可以使用CGSizeMake

CGSize const ksizeSmall = SOME_BOOLEAN_VARIABLE ? CGSizeMake(187, 187) : CGSizeMake(206, 206); 

如果SOME_BOOLEAN_VARIABLE是一个编译时间常数表达式,你可以使用,而不是条件编译:

#if SOME_BOOLEAN_VARIABLE 
CGSize const ksizeSmall = {187, 187}; 
#else 
CGSize const ksizeSmall = {206, 206}; 
#endif 

* gcc编译器有一个C语言扩展,为此提供了特殊的语法。它也可以在Objective-C中获得。但是,此扩展不是该语言的一部分。

+0

这正是我需要的信息,编译器并没有提供任何真正的信息,我接受了你的答案。谢谢你的时间。 – jcpennypincher