将代码从Xcode 3迁移到4时出现错误:无法在@interface或@protocol内声明变量。

4
我正在将旧版iPhone应用从Xcode 3迁移到Xcode 4。但是我在曾经能够在Xcode 3中构建的代码上收到了一个错误 -- 实际上,我故意以这种方式编写它来隐藏实现细节以避免影响其他模块。然而,在Objective-C中似乎发生了一些变化。现在这段代码会出现以下错误: “Cannot declare variable inside @interface or @protocol.” 请记住,这是.m文件顶部的代码,而不是.h文件。
@interface VisualViewController ()
BOOL doReloadPhoto;

+ (void)buildVisualEffectInfo;

@property (nonatomic, retain) HandleCheckListSetting *checkListHandler;
@end
1个回答

9

这段代码以前可能已经编译过,但我认为它并没有做你想要的事情。听起来像是你想在类扩展中创建一个私有变量。然而,你目前的语法只是一个顶层变量,等同于:

BOOL doReloadPhoto;

@interface VisualViewController ()
// etc.
@end

您需要将其放在花括号中,才能成为实例变量:

@interface VisualViewController () 
{
    BOOL doReloadPhoto;
}

相反地,我不确定在Xcode 3的编译器中是否可能实现这种扩展中的ivar,这也许是你以前所做的事情。听起来编译器现在(明智地)指出你可能预期的代码并不起作用,并迫使你完全清楚地表达你的意图。

最近还可以在@implementation块中声明私有ivar,使用相同的语法:

@implementation VisualViewController
{
    BOOL doReloadPhoto;
}

哇,我从没想到在实现中你可以这样做。太酷了。 - Jack Lawrence
2
@Jack:这实际上是苹果现在推荐的做法。我喜欢它。它更有意义;ivars确实是实现的一部分,而不是接口。 - jscs
@JacquesCousteau +1. 我也不知道呢。每天都有新的东西可以学。;) - Itai Ferber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接