iOS - 关于setAlpha的import vs forward声明

Rom*_*mes 8 import xcode class forward-declaration ios

我正在尝试对我通过IB设置的对象做一些动画.我正在向我的.h添加一个前向声明,如下所示:

@class MySpecialClass;
Run Code Online (Sandbox Code Playgroud)

然后设置如下属性:

@property (nonatomic, retain) IBOutlet MySpecialClass *specialClass;
Run Code Online (Sandbox Code Playgroud)

我希望能够隐藏specialClass使用setAlpha,但我在尝试编译时从xcode得到以下错误.

Receiver type 'MySpecialClass' for instance message is a forward declaration.
Run Code Online (Sandbox Code Playgroud)

我是否需要导入我的课程而不是前瞻性声明?如果我不需要,我不想输入任何不必要的东西.

Joe*_*ssi 49

前向声明只是告诉编译器,"嘿,我知道我正在声明你不认识的东西,但是当我说@MyClass时,我保证会在实现中#import它".

你使用前向声明来防止像循环包含的东西(MyClass导入你导入MyClass的YourClass ......),但你用你的代码做的'承诺'就是你以后#import它

  • 我读过的最好,最简洁的解释之一 - 做得很好.如果可能的话,我会更多地投票给你. (5认同)
  • 我终于理解了前瞻性声明,谢谢:) (2认同)

gra*_*ver 5

你需要导入它.前向声明只是为了使这个类存在的编译器静音,但它不知道它的成员,方法,属性,大小......

  • 但是,导入可以在.m文件中完成.通常的模式是.h中的前向声明,在.m中导入. (9认同)