如何在Objective C中实现mixin或trait类型的行为?

时间:2012-03-27 11:44:56

标签: objective-c ios ruby oop mixins

在一个项目中发生了两次或三次。 要求是在一个viewController中具有某个功能,然后将该功能移动到另一个viewController。

我制定了一个声明这些功能的协议,但这并没有多大帮助。 每次需求发生变化时,我都必须将所有方法实现从一个文件复制粘贴到另一个文件,然后将该协议从一个头文件声明到另一个头文件。

有没有办法让我可以在一个地方实现,然后以某种方式将它与一个类混合,然后轻松删除将其添加到另一个类,如ruby mixins或Scala中的那个特性?

1 个答案:

答案 0 :(得分:1)

根据具体情况,您可能不需要Ruby Mixin。您可以创建一个继承自UIViewController的新类,并将其用作需要此协议的视图控制器类的基类。

如果您希望在所有视图控制器中都使用该协议,则可以使用category扩展基类。

如果你需要为非UIViewController后代的类提供相同的协议实现,那么你真的需要像Ruby Mixin这样的东西。在这种情况下,请参阅this question,了解如何使用邮件转发。 this question在答案中有一些相关信息。

适当的选择取决于需要实施的类集。如果在某些但不是所有UIViewController类中都需要它,请使用子类。如果在所有UIViewController类中都需要它,但没有其他类,则使用类别。否则,请使用邮件转发。