Swift 代表在 2 个地方设置单例
Posted
技术标签:
【中文标题】Swift 代表在 2 个地方设置单例【英文标题】:Swift Delegate set on a singleton at 2 places 【发布时间】:2021-11-09 02:24:51 【问题描述】:我有一个名为 GameCenterFacade 的单例。在我的应用主页 ViewController 我设置:
GameCenterFacade.shared.delegate = self
然后,我在作为主页 ViewController 的实例变量的自定义类中使用相同的代码。这似乎将 GameCenterFacades 的共享委托更新为 Instance 变量而不是 ViewController。因此,协议方法仅在自定义类中调用,而不在 ViewController 中调用。
有没有一种巧妙的方法可以将 View Controller 和 Instance Variable 自定义类设置为 GameCenterFacade 的单例委托?我猜是因为它是一个单例,它只能有 1 个委托?
【问题讨论】:
也许您需要发布/订阅解决方案? 【参考方案1】:委托设计模式是一对一的模式。任何给定对象只有一个委托。
也就是说,创建自己的多代表模式并不难。为您想要拥有多个委托(multiDelegates,我们称它们)的对象提供一个委托对象数组。让它的 init 方法创建一个空数组multiDelegates
。
为管理 multiDelegate 数组的对象提供 addDelegate 方法和 removeDelegate 方法。事实上,创建一个定义这些方法的 MultiDelegateProtocol。
在 GameCenterFacade 中,当它通知客户端感兴趣的事件时,让它循环遍历它的 multiDelegate 数组并依次通知每个客户端。
或者,您可以使用发布/订阅模式或通知中心。
【讨论】:
以上是关于Swift 代表在 2 个地方设置单例的主要内容,如果未能解决你的问题,请参考以下文章