如何在 watchOS 上基于分页的界面中的多个界面控制器之间共享变量
Posted
技术标签:
【中文标题】如何在 watchOS 上基于分页的界面中的多个界面控制器之间共享变量【英文标题】:How can I share variables between multiple interface controllers in a paged-based interface on watchOS 【发布时间】:2017-07-27 00:19:23 【问题描述】:我有多个界面控制器,它们都以基于分页的格式同时打开。我需要在这些接口控制器之间共享信息。
对于我的用例,我不能强迫用户使用其他接口控制器之一(通过启动 segue),因此这些解决方案对我不起作用。我需要能够更改任一控制器中的一些变量,并在任一控制器中访问这些变量。
我尝试直接在界面控制器中设置一个当前不可见的变量:
InterfaceController2().variable = false
但是,这不起作用(如预期的那样),因为它没有访问该接口控制器的当前实例化实例。
我正在考虑某种全局变量情况,或者将首选项存储在 UserDefaults 中,但我觉得必须有更好的方法。
【问题讨论】:
使用单例。 ***.com/q/32660471/294884 【参考方案1】:你可以使用单例。创建单例的最简单方法是将要在 InterfaceControllers
之间共享的变量设为类/静态属性。
你可以这样创建它:
class CommonClass
static var mySingleton = true
然后像这样从您的InterfaceController
s 访问它:
CommonClass.mySingleton = false
.
在使用单例时应该小心,因为它们可以从代码的任何位置访问,因此它们可能被误用为像全局变量一样,这可能有其缺陷。
查看this 文章了解有关单例的更多详细信息。
【讨论】:
【参考方案2】:最佳选择:如果您的控制器有一个共同的父级,您可以使用委托方法从共同的父级传递/检索值。
Alt:您可以创建一个共享实例来存储您的值,并且您的控制器可以从那里更新/检索该值。
最后的选择:这有点恶心,但你可以使用 NSNotificationCenter。 (a) 在所有控制器中添加观察者,(b) 每当值更新时发布通知。然后 (c) 在通知处理程序中更新控制器中的本地值。
【讨论】:
再简单不过了,使用单例。 ios 工程中的几乎所有内容都是单例(尤其是从“应用程序”开始!) 我将使用单例(Alt 建议),但我可以看到这些其他方法在类似情况下会更好。以上是关于如何在 watchOS 上基于分页的界面中的多个界面控制器之间共享变量的主要内容,如果未能解决你的问题,请参考以下文章