【问题标题】:Same Protocol defined in multiple class在多个类中定义相同的协议
【发布时间】:2014-04-07 22:59:30
【问题描述】:

是否可以在不同的类中使用不同的方法定义相同的协议?

例如: 在classA.h

  @protocol ME_DELEGATE <NSObject>

  @required

  -(void)doThis;

  @end

在classB.h中

@protocol ME_DELEGATE <NSObject>

@required

-(void)doThat;

@end

我做得对吗?

【问题讨论】:

  • 你为什么要这样做?为什么不使用两个不同名称的两个协议?
  • 我正在创建一个静态库,其中每个类(总共 5 个 NSObject 类)都有自己的委托协议。当我集成到项目中时,我只想添加一个协议来调用不同类中的所有方法。
  • 将它们全部设为可选
  • 正如@aguiarpgc 所说,将所有委托方法放在一个协议中并使它们成为可选的。不过必须同意 rmaddy 的观点,并说听起来更好的设计应该有多个协议,每个协议都定义了适当的方法。
  • 我明白了,有没有一种方法可以通过一次导入来调用多个协议?

标签: ios objective-c class delegates


【解决方案1】:

@悉达多阿育王

您可以在两个不同的类中使用相同的协议,系统将生成警告“'protocolName'的重复协议定义被忽略”(使用默认设置)

如果将协议方法声明为@required 或@optional,则可以使其工作。

另外,如果你想让 2 个不同的对象作为同一个协议的代表,那么正如已经建议的那样,你需要将协议方法定义为 @optional... 我已经测试过并且它可以工作...。更棘手的部分是获取对对象的引用以正确设置第二个委托

我添加了一个练习来展示它是如何以两种方式工作的......两个类中的相同协议,然后是 2 个不同的对象作为相同协议的代表。它还展示了如何在同一个协议中让 2 个委托给同一个类。

https://github.com/eharo2/ProtocolTest

鉴于协议基于消息传递范式,通过正确的对象引用和方法实现,您几乎可以做任何您想做的事情。

希望对你有帮助...e

【讨论】:

  • 感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多