gpt4 book ai didi

objective-c - 的类型不符合 -- 但它符合!

转载 作者:搜寻专家 更新时间:2023-10-30 20:13:24 25 4
gpt4 key购买 nike

好的,我在同一个头文件中有两个协议(protocol),我们称它们为 Protocol1 和 Protocol2。我有一个符合这两种协议(protocol)的主应用程序 Controller ,以及一个具有以下成员的 NSWindowController 子类:

id <Protocol1, Protocol2> delegate;

我在 NSWindowController 子类实现的末尾收到一条警告,提示“type id 不符合 Protocol2”。但是,如图所示,委托(delegate)人必须遵守这两个协议(protocol),它确实这样做了。

此外,该应用程序运行完美。还有其他方法吗?我想我可以将两个协议(protocol)折叠在一起,但这会损害程序的模块化。

编辑:

这是两个协议(protocol)。由于这更像是一个测试场景,因此它们很短。

@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)列表。协议(protocol)可以扩展协议(protocol)列表,但尚不清楚该语法是否支持它。

您可以创建一个组合协议(protocol):

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

虽然不优雅,但它会工作;但它需要您的委托(delegate)类也符合 AddPoewrAndTPTBController,而不仅仅是两个单独的。

关于objective-c - <Protocol 1> 的类型不符合 <Protocol 2> -- 但它符合!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1309169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com