如何在没有预处理器的情况下创建在类中访问的全局CGFloat



我的.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;
}

为什么我收到警告,而我不能在课堂上使用这个浮动?哦,我不想用预处理器的方式

您正在init中重新标记具有相同名称的新变量。在init方法内部,声明是该块的本地声明。你的意思是:

收割台

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

impl

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;
}
}
}

也就是说,这正是笔尖文件和故事板设计用来处理的问题。

即使没有笔尖文件,我也会避免这种方法。这在很大程度上取决于确保在访问这些全局变量之前调用init(如果不小心,很容易不会发生这种情况)。更好的方法是为它们创建类或实例方法,而不是创建"伪常量"(因为它们在运行时会发生变化,所以不是真正的常量)。

最新更新