为什么我不能将常量放入CGRectMake中?

Tha*_*nks 1 iphone cocoa-touch uikit

我试过这个:

CGRectMake(0.0f, kFooBarHeight, 100.0f, 10.0f);
Run Code Online (Sandbox Code Playgroud)

我收到了错误unexpected ';' before ')',并且too few arguments for CGRectMake.当我用以下方式交换:

CGFloat foo = kFooBarHeight;
CGRectMake(0.0f, foo, 100.0f, 10.0f);
Run Code Online (Sandbox Code Playgroud)

那一切都很好.常量不适合作为参数传递吗?

Jon*_*hon 15

没有kFooBarHeight定义就不可能给出一个好的答案,但我猜你用预处理器定义定义了kFooBarHeight?如果是这样,最好的猜测是你在末尾加了一个分号.您的定义应如下所示:#define kFooBarHeight 10但您设置为:#define kFooBarHeight 10;.

如果您拥有的是第二个定义,当它被预处理器替换时,您得到:

CGRectMake(0.0f, 10;, 100.0f, 10.0f);
Run Code Online (Sandbox Code Playgroud)

这就是为什么你的第二个例子正常工作,它扩展为:

CGFloat foo = 10;;
CGRectMake(0.0f, foo, 100.0f, 10.0f);
Run Code Online (Sandbox Code Playgroud)

同样,这只是一个有根据的猜测,如果没有kFooBarHeight的实际定义,这是不可能的.