将代码从Xcode 3移动到4会产生错误:无法在@interface或@protocol中声明变量

hal*_*t00 4 compiler-errors objective-c instance-variables xcode4 class-extensions

我从迁移的Xcode 3我的旧iPhone应用程序来的Xcode 4.我收到这个代码错误,用来在Xcode中创建3 - 其实我写这样的目的,隐藏其他模块的实现细节.但是,Objective-C似乎发生了一些变化.此代码现在收到错误

无法在@interface或@protocol中声明变量.

请记住,这是.m文件顶部的代码而不是.h

@interface VisualViewController ()
BOOL doReloadPhoto;

+ (void)buildVisualEffectInfo;

@property (nonatomic, retain) HandleCheckListSetting *checkListHandler;
@end
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 9

这可能是之前编译过的,但我认为它并没有按照您的想法进行.听起来你想在类扩展中创建一个私有的ivar.您拥有的语法只是一个顶级变量,相当于:

BOOL doReloadPhoto;

@interface VisualViewController ()
// etc.
@end
Run Code Online (Sandbox Code Playgroud)

你需要把它放在花括号里面才能成为一个ivar:

@interface VisualViewController () 
{
    BOOL doReloadPhoto;
}
Run Code Online (Sandbox Code Playgroud)

(相反,我不确定这个 - 扩展中的ivar - 是否可以使用Xcode 3的编译器,这可能就是你按照你的方式做到的原因.)听起来好像编译器现在(理智地)指出了您可能没有按照预期执行的代码,并强迫您完全明确自己的意图.

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

@implementation VisualViewController
{
    BOOL doReloadPhoto;
}
Run Code Online (Sandbox Code Playgroud)

  • @Jack:这实际上是Apple推荐的做法.我喜欢它.它的感觉提高了一百万倍; ivars确实是实现的一部分,而不是接口. (2认同)