gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:08:29 24 4
gpt4 key购买 nike

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

为什么我收到警告并且我不能在我的类里面使用这个 float ?哦,我不想顺便使用预处理器

最佳答案

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

标题

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 文件和 Storyboard旨在处理的问题。

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

关于iphone - 如何在没有预处理器的情况下创建在类中访问的全局 CGFloat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12697146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com