我的.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
(如果不小心,很容易不会发生这种情况)。更好的方法是为它们创建类或实例方法,而不是创建"伪常量"(因为它们在运行时会发生变化,所以不是真正的常量)。