首页 > 解决方案 > Swift 代表在 2 个地方设置单例

问题描述

我有一个名为 GameCenterFacade 的单身人士。在我的应用主页 ViewController 我设置:

GameCenterFacade.shared.delegate = self

然后,我在作为主页 ViewController 的实例变量的自定义类中使用相同的代码。这似乎将 GameCenterFacades 的共享委托更新为 Instance 变量而不是 ViewController。因此,协议方法仅在自定义类中调用,而不是在 ViewController 中调用。

有没有一种巧妙的方法可以将 View Controller 和 Instance Variable 自定义类设置为 GameCenterFacade 的单例委托?我猜是因为它是一个单例,它只能有 1 个代表?

标签: swiftsingletonprotocolsdelegation

解决方案


委托设计模式是一对一的模式。任何给定的对象只有一个委托。

也就是说,创建自己的多代表模式并不难。为您想要拥有多个委托(multiDelegates,我们称它们)的对象提供一个委托对象数组。让它的 init 方法创建一个空数组multiDelegates

为管理 multiDelegate 数组的对象提供 addDelegate 方法和 removeDelegate 方法。实际上,创建一个定义这些方法的 MultiDelegateProtocol。

在 GameCenterFacade 中,当它通知客户端感兴趣的事件时,让它循环遍历它的 multiDelegate 数组并依次通知每个客户端。

或者,您可以使用发布/订阅模式或通知中心。


推荐阅读