在前向声明中包含的类中调用协议中定义的方法

时间:2014-07-02 14:51:00

标签: objective-c protocols forward-declaration

有没有办法告诉编译器非导入的类(即前向声明)是否符合协议?

在下面的示例中,我想在类foo上调用方法ForwardClass。该类遵循MyProtocol协议,但编译器不知道自从使用了前向声明。

@protocol MyProtocol <NSObject>

+ (void) foo;

@end


@class ForwardClass; // <-- Forward declaration

@implementation MyClass

- (void) bar
{
    [ForwardClass foo]; // <-- This doesn't work!
}


我希望的是在声明类这样的时候应用协议:

@class ForwardClass <MyProtocol>

或以某种方式使用协议,同时调用方法:

[ForwardClass<MyProtocol> foo]; 


这不是一个很大的问题,因为我可以直接导入这个类,但是如果它有用的话会很好,因为我只需要导入协议,而不是整个类。

2 个答案:

答案 0 :(得分:1)

没有。前向声明适用于您需要了解类类型但不需要了解其特定实现(例如属性和方法)的情况。在您的情况下,您确实关心它实现的方法,因此您需要引入ForwardClass的标题。

答案 1 :(得分:1)

你可以做到

Class x = NSClassFromString(@"ForwardClass");
[x foo];

但它不是很漂亮