簡體   English   中英

輸入id <Protocol1> 不符合id <Protocol2> - 但確實如此!

[英]Type id <Protocol1> does not conform to id <Protocol2> — but it does!

好吧,我在同一個頭文件中有兩個協議,讓我們稱它們為Protocol1和Protocol2。 我有一個符合這兩個協議的主app控制器,以及一個具有以下成員的NSWindowController子類:

id <Protocol1, Protocol2> delegate;

我在我的NSWindowController子類實現結束時收到“類型id不符合Protocol2”的警告。 但是,如圖所示,委托必須符合這兩種協議。

此外,該應用程序完美。 還有其他方法可以做到這一點嗎? 我想我可以將兩個協議一起折疊,但這會損害程序的模塊性。

編輯:

這是兩個協議。 由於這更像是一個測試場景,因此它們很短。

@protocol TPTBController <NSObject>

-(void)sendGrowlMessage:(NSString *)message title:(NSString *)title;

@end

@protocol AddPower <NSObject>

-(void)addPower:(NSArray *)array;
-(void)setCanAddPower:(BOOL)can;

@end

如果id-with-protocols實際上支持協議列表,則語言規范不明確。 協議可以擴展協議列表,但不清楚該語法是否支持它。

您可以創建組合協議:

@protocol AddPowerAndTPTBController <AddPower, TPTBController>
@end
...
id <AddPowerAndTPTBController> delegate;

雖然不優雅,但它會起作用; 但它需要你的委托類也要符合AddPoewrAndTPTBController,而不僅僅是兩個單獨的。

您是否在NSWindowController子類上導入協議?

應用程序的工作指向了我的方向。 似乎在進行靜態檢查時,編譯器無法確定您的類是否符合協議,而在實際調度消息時它正在成功(這就是應用程序按預期工作的原因)

如果將協議拆分為單獨的文件,然后將它們都導入NSWindowController類會發生什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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