I’ve run into an Objective-C problem that doesn’t seem to make any sense to me. I am a relatively well-versed ObjC programmer and understand the whole “forward declaration” concept, but this one has me scratching my head. So here’s the deal:
ClassA is a class in my Xcode project that is project-only.
ClassB is a subclass of ClassA which is public and is imported into my framework’s header.
I am getting a “Cannot find interface declaration for ‘ClassA’, superclass of ‘ClassB’…” error when building. I have already put the @class ClassA; forward declaration in ClassB.h, but that does not seem to solve the problem. When I change the @class ClassA; to #import ClassA.h, it works fine. However, since ClassA is project-only, dependent projects cannot build ClassB because it cannot access ClassA’s source.
Any help would be appreciated and I hope that makes sense. Thanks!
To subclass a class, the superclass’s full declaration must be available to the compiler.
@classjust enables references to instances of said class — allows forA *foo;.Subclassing requires more metadata (at least, it did under the legacy runtime — I think it might be possible to support subclassing without the full super’s @interface. Technically possible, but probably not useful.)