有没有办法告诉编译器非导入的类(即前向声明)是否符合协议?
在下面的示例中,我想在类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];
这不是一个很大的问题,因为我可以直接导入这个类,但是如果它有用的话会很好,因为我只需要导入协议,而不是整个类。
答案 0 :(得分:1)
没有。前向声明适用于您需要了解类类型但不需要了解其特定实现(例如属性和方法)的情况。在您的情况下,您确实关心它实现的方法,因此您需要引入ForwardClass的标题。
答案 1 :(得分:1)
你可以做到
Class x = NSClassFromString(@"ForwardClass");
[x foo];
但它不是很漂亮