在 Objective-C 中,我想强制派生类实现给定的接口(interface),而不提供默认实现(父类中的实现)。
我知道协议(protocol)可以用于此目的,并且我相信我了解如何使用协议(protocol),但我显然错过了一些东西......
我定义了Parent类,并从parent派生了几个Child类。 所有子类都符合需要实现 myMethod 的协议(protocol)。
我想迭代 Child 实例,通过父类(super class) Parent 引用它们,并在每个实例上调用 myMethod。
编译器(毫不奇怪)警告 Parent 可能不会响应 myMethod。
所有证据表明,实际上每个派生的 Child 实例都会调用 myMethod,但我收到警告的事实让我感到不安,并表明我没有正确实现这一点。
我错过了什么?
谢谢
最佳答案
这不是协议(protocol)的使用方式。协议(protocol)是没有实现的接口(interface)。如果一个类声称遵守协议(protocol)(正如您的父类显然所做的那样),它需要实现这些方法,否则您将收到警告。您想要做的是让所有实际实现该协议(protocol)的类声明它们符合该协议(protocol),而不是通过此父类名称来引用它们,而是将它们引用为 id<ProtocolNameHere>
。这声明它们是符合该协议(protocol)的对象。
关于Objective-C 协议(protocol)模仿 'virtual-functions' 会产生编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1435533/