[英]Calling a method defined in a protocol on a class included with forward declaration
有沒有辦法告訴編譯器未導入的類(即,前向聲明)遵守協議?
在下面的示例中,我想在類ForwardClass
上調用方法foo
。 該類遵循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];
這並不是一個大問題,因為我可以直接導入該類,但是如果它可以工作,那將很好,因為我只需要導入協議,而不是整個類。
否。前向聲明用於需要了解類類型但不需要了解其特定實現(例如屬性和方法)的情況。 在您的情況下,您確實關心它實現的方法,因此您需要為ForwardClass引入標頭。
你可以做
Class x = NSClassFromString(@"ForwardClass");
[x foo];
但這不是那么漂亮
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.