swift - Swift 代表在 2 个地方设置单例
问题描述
我有一个名为 GameCenterFacade 的单身人士。在我的应用主页 ViewController 我设置:
GameCenterFacade.shared.delegate = self
然后,我在作为主页 ViewController 的实例变量的自定义类中使用相同的代码。这似乎将 GameCenterFacades 的共享委托更新为 Instance 变量而不是 ViewController。因此,协议方法仅在自定义类中调用,而不是在 ViewController 中调用。
有没有一种巧妙的方法可以将 View Controller 和 Instance Variable 自定义类设置为 GameCenterFacade 的单例委托?我猜是因为它是一个单例,它只能有 1 个代表?
解决方案
委托设计模式是一对一的模式。任何给定的对象只有一个委托。
也就是说,创建自己的多代表模式并不难。为您想要拥有多个委托(multiDelegates,我们称它们)的对象提供一个委托对象数组。让它的 init 方法创建一个空数组multiDelegates
。
为管理 multiDelegate 数组的对象提供 addDelegate 方法和 removeDelegate 方法。实际上,创建一个定义这些方法的 MultiDelegateProtocol。
在 GameCenterFacade 中,当它通知客户端感兴趣的事件时,让它循环遍历它的 multiDelegate 数组并依次通知每个客户端。
或者,您可以使用发布/订阅模式或通知中心。
推荐阅读
- python - Pandas 累计和重置基于最后一个检查点的百分比
- javascript - 如何确定是什么触发了计算出的 observable 发生变化?淘汰赛JS
- excel - Excel 数据透视表中的默认选择是什么
- math - 算术交换有哪些不同版本,它们为什么起作用?
- python - 如何处理一个问题中的多个 lambda?
- linux - 您在标准 HTTP(80) 端口上配置了 HTTPS(443)
- java - 点击离开后 JOptionPane.showMessageDialog 不会消失
- riscv - 关于 LR/SC 在同一个 hart 上的两个软螺纹
- css - 角页中未显示横幅图像
- ios - Swift tableView复选标记在滚动时重复