注意:这与this question类似,但不一样。我保证。
我有一系列表视图,它们调用模态视图来对表的内容进行排序。为此,我在一个表视图控制器的头文件中设置了一个简单的协议,它工作得很好。然后我将此协议复制到我的其他表视图控制器并收到此警告:
忽略'ModalViewDelegate'的重复协议定义
现在我意识到这只是一个警告,但我不想每次编译时都看不到它。为了摆脱警告,我导入了最初定义协议的头文件。再一次,我并不完全满意。将头文件导入每个表视图似乎很草率,所以我可以在没有警告的情况下使用协议。
如果你已经读过这篇文章,我感谢你。我的问题是'为什么会这样?在使用相同的协议时是否有更好的方法来消除此警告?'
答案 0 :(得分:7)
在使用相同的协议时是否有更好的方法来消除此警告?
编译器需要了解协议才能引用它。有两种方法可以实现这一点:将声明协议的标头导入到您正在使用它的文件中,或者在这些文件中对协议进行前向声明:@protocol MyProtocol;
。第二个实际上只在协议需要相互引用时才有用(避免循环导入);如果一个类需要采用该协议,则需要查看协议中方法的声明,这意味着需要查看协议声明本身,即标题。
将头文件导入每个表视图似乎很草率,所以我可以在没有警告的情况下使用该协议。
这不是草率的,这是事情的运作方式。听起来,将协议声明放入其自己的标头并将其导入到需要的地方可能是有意义的。
答案 1 :(得分:2)
我发现了类似的警告,其中@protocol在类的标题中定义。将该协议分解为自己的.h并将其导入其他地方修复它。