簡體   English   中英

在包含在前向聲明中的類上調用協議中定義的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM