You're correct — the @class
forward declaration does nothing if there aren't any other declarations making use of it before the @interface
for that class appears.
And in the current state of SWRevealViewController.h on github, the declarations appear in the following order:
@class SWRevealViewController; // fwd declaration of class
@protocol SWRevealViewControllerDelegate; // fwd declaration of protocol
@interface SWRevealViewController; // actual class definition
@protocol SWRevealViewControllerDelegate; // actual protocol definition
With that ordering, the class definition requires the forward declaration of the protocol, but the forward declaration of the class is unused.
However, it doesn't cause any harm, either. If the author were to reverse the positions of the class and protocol definitions, it'd be the other way around (the protocol would need the forward declaration of the class, and the forward protocol declaration would be unused). It's simply a belt-and-suspenders matter of style.