解决多重继承问题

时间:2014-11-05 19:18:19

标签: inheritance swift

我基本上有两个视图控制器。它们都可以与另一个控制器/管理器一起使用。我希望这个管理器对于两个控制器完全相同。因此,两个控制器都应该引用相同的管理器/控制器。还有一个使用经理的第三类。

起初我以为我可以将管理器/控制器继承到两个视图控制器。但斯威夫特不允许这样做。那么,我怎么能实现这个想法呢?

所有这一切都是这笔交易:

我有这四个课程:

FirstViewController(继承UIViewController)

SecondViewController(Inherits UIVIewController)

EventController(尚未继承)

MapManager(不包含任何内容)

firstviewcontroller,secondviewcontroller和MapManager需要使用EventController中的函数/属性。

我现在拥有的:

首先,SecondViewcontrollers和MapManager继承自UIViewController类型的EventController。然而,在map manager类中,EventController的属性无法正常工作(例如:填充数组为空)

1 个答案:

答案 0 :(得分:0)

如果您有2个或更多具有共同行为的UIViewController(或类似),您可以创建一个继承自BaseViewController的基类UIViewController,然后使您的专用视图控制器继承从它

        UIViewController
               |
       BaseViewController
         |           | 
ViewController1 ViewController2

如果方程中涉及另一个类,则该解决方案不起作用。像许多现代语言一样,Swift仅支持单继承。

为简单起见,请拨打附加班级"经理"。我看到了3种替代解决方案:

  1. 在基本视图控制器中创建一个管理器实例(作为属性),并通过包装器方法公开其接口(即为管理器创建协议,在基本视图控制器中实现它,实现简单将请求转发给经理实例)

  2. 在基本视图控制器中创建一个管理器实例(作为属性),并使其可供子类访问

  3. 删除管理器类并将其代码合并到基本视图控制器

  4. 这份清单当然不是详尽无遗的。这个论点过于宽泛,无法提供有针对性的建议,而且在任何情况下都没有解决办法。