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