我正在查看SWRevealViewController的代码,这是一个受欢迎的库/ cocoapod,在SWRevealViewController.h中,我注意到以下内容:
@class SWRevealViewController;
我知道何时在其他头文件中使用标头的前向类声明,但是我不明白当它在同一个类中时该声明提供了什么好处。我错过了什么或者这段代码没有做任何事情吗?
答案 0 :(得分:3)
根本不需要那条线。但是需要议定书的前瞻声明。
通常,当在类之前声明协议并且协议需要引用该类时,您会看到类的前向声明。
在这种情况下,类在协议之前声明。因此,必须向前声明协议,因为类引用了协议(在delegate
属性中)。
无需转发声明类和协议。
答案 1 :(得分:3)
您是正确的 - 如果在该类的@class
出现之前没有任何其他声明使用,则@interface
转发声明不会执行任何操作。
在the current state of SWRevealViewController.h on github中,声明按以下顺序显示:
@class SWRevealViewController; // fwd declaration of class
@protocol SWRevealViewControllerDelegate; // fwd declaration of protocol
@interface SWRevealViewController; // actual class definition
@protocol SWRevealViewControllerDelegate; // actual protocol definition
使用该顺序,类定义需要协议的前向声明,但类的前向声明未使用。
然而,它也不会造成任何伤害。如果作者要颠倒类和协议定义的位置,那么它是相反的(协议需要类的前向声明,并且前向协议声明将是未使用的)。它只是一种带式和吊带式的风格。