1

我的 .h 类中有以下内容:

extern CGFloat tableMarginSide;
extern CGFloat tableMarginTop;
extern CGFloat fromImageSize;
extern CGFloat keyboardHeightPortrait;
extern CGFloat keyboardHeightLandscape;

在我的初始化中我做了:

 CGFloat tableMarginSide = 20;
    CGFloat tableMarginTop = 20;
    CGFloat fromImageSize = 50;

    CGFloat keyboardHeightPortrait  = 210;
    CGFloat keyboardHeightLandscape  = 160;

    if (IS_IPAD){
        CGFloat tableMarginSide = 80;
        CGFloat tableMarginTop = 65;
        CGFloat fromImageSize = 50;

        CGFloat keyboardHeightPortrait = 260;
        CGFloat keyboardHeightLandscape = 350;
    }

为什么我收到警告并且我不能在课堂上使用这个浮点数?哦,顺便说一句,我不想​​使用预处理器

4

1 回答 1

2

您正在重新标记init. 在init方法内部,声明对该块是本地的。你的意思是这样的:

标题

extern CGFloat tableMarginSide;
extern CGFloat tableMarginTop;
extern CGFloat fromImageSize;
extern CGFloat keyboardHeightPortrait;
extern CGFloat keyboardHeightLandscape;

暗示

CGFloat tableMarginSide = 20;
CGFloat tableMarginTop = 20;
CGFloat fromImageSize = 50;

CGFloat keyboardHeightPortrait  = 210;
CGFloat keyboardHeightLandscape  = 160;

@interface ...
- (id)init {
   self = [super init];
   if (self) {
     if (IS_IPAD)
       tableMarginSide = 80;
       tableMarginTop = 65;
       fromImageSize = 50;

       keyboardHeightPortrait = 260;
       keyboardHeightLandscape = 350;
     }
   }
}

也就是说,这正是 nib 文件和故事板旨在处理的问题。

即使没有 nib 文件,我也会避免这种方法。这非常依赖于确保您init在访问这些全局变量之前调用(如果您不是很小心,这很容易不会发生)。更好的方法是为这些创建类或实例方法,而不是创建“伪常量”(它们并不是真正的常量,因为它们在运行时会发生变化)。

于 2012-10-02T19:50:37.183 回答