Swift 在 2 个地方的单例上设置委托
Swift Delegate set on a singleton at 2 places
我有一个名为 GameCenterFacade 的单例。在我的应用主页 ViewController 我设置:
GameCenterFacade.shared.delegate = self
然后我在自定义 class 中使用相同的代码,它是主页 ViewController 的实例变量。这似乎将 GameCenterFacades 的共享委托更新为实例变量而不是 ViewController。结果,协议方法仅在自定义 class 中被调用,而不是 ViewController.
有没有聪明的方法可以将视图控制器和实例变量自定义 class 设置为 GameCenterFacade 的单例委托?我猜是因为它是单例,所以它只能有 1 个代表?
委托设计模式是一对一模式。任何给定对象只有一个委托。
也就是说,创建您自己的多委托模式并不难。为您希望拥有多个委托(multiDelegates,我们称它们)的对象提供一个委托对象数组。让它的 init 方法创建一个空数组 multiDelegates
.
给管理multiDelegate 数组的对象一个addDelegate 方法和一个removeDelegate 方法。事实上,创建一个定义这些方法的 MultiDelegateProtocol。
在 GameCenterFacade 中,当它去通知客户端有关有趣的事件时,让它循环遍历它的 multiDelegates 数组并依次通知每个。
或者,您可以使用 publish/subscribe 模式或通知中心。
我有一个名为 GameCenterFacade 的单例。在我的应用主页 ViewController 我设置:
GameCenterFacade.shared.delegate = self
然后我在自定义 class 中使用相同的代码,它是主页 ViewController 的实例变量。这似乎将 GameCenterFacades 的共享委托更新为实例变量而不是 ViewController。结果,协议方法仅在自定义 class 中被调用,而不是 ViewController.
有没有聪明的方法可以将视图控制器和实例变量自定义 class 设置为 GameCenterFacade 的单例委托?我猜是因为它是单例,所以它只能有 1 个代表?
委托设计模式是一对一模式。任何给定对象只有一个委托。
也就是说,创建您自己的多委托模式并不难。为您希望拥有多个委托(multiDelegates,我们称它们)的对象提供一个委托对象数组。让它的 init 方法创建一个空数组 multiDelegates
.
给管理multiDelegate 数组的对象一个addDelegate 方法和一个removeDelegate 方法。事实上,创建一个定义这些方法的 MultiDelegateProtocol。
在 GameCenterFacade 中,当它去通知客户端有关有趣的事件时,让它循环遍历它的 multiDelegates 数组并依次通知每个。
或者,您可以使用 publish/subscribe 模式或通知中心。