如何在 watchOS 上基于分页的界面中的多个界面控制器之间共享变量
How can I share variables between multiple interface controllers in a paged-based interface on watchOS
我有多个界面控制器,它们都以基于分页的格式同时打开。我需要在这些接口控制器之间共享信息。
对于我的用例,我无法强制用户使用其他界面控制器之一(通过启动 segue),因此这些解决方案对我不起作用。我需要能够在任一控制器中更改一些变量,并在任一控制器中访问这些变量。
我试过直接在界面控制器中设置一个变量,目前用这种方式不可见:
InterfaceController2().variable = false
但是,这并没有起作用(如预期的那样),因为它没有访问该接口控制器的当前实例化实例。
我正在考虑某种全局变量情况,或者将首选项存储在 UserDefaults 中,但我觉得必须有更好的方法。
最佳选择:如果您的控制器有一个共同的父级,您可以使用委托方法来 pass/retrieve 来自共同父级的值。
Alt:您可以创建一个共享实例来存储您的值,您的控制器可以 update/retrieve 从那里获取值。
最终选择:有点恶心,但你可以使用 NSNotificationCenter。 (a) 在所有控制器中添加观察者,(b) post 值更新时通知。然后 (c) 在通知处理程序中更新控制器中的本地值。
您可以使用单例。创建单例最简单的方法是让你想要在 InterfaceControllers
和 class/static 属性.
之间共享的变量
您可以这样创建它:
class CommonClass {
static var mySingleton = true
}
然后像这样从您的 InterfaceController
访问它:
CommonClass.mySingleton = false
.
您在使用单例时应该小心,因为它们可以从您的代码的任何地方访问,所以它们可能被误用为全局变量,这可能有其缺陷。
查看 this 文章了解有关单例的更多详细信息。
我有多个界面控制器,它们都以基于分页的格式同时打开。我需要在这些接口控制器之间共享信息。
对于我的用例,我无法强制用户使用其他界面控制器之一(通过启动 segue),因此这些解决方案对我不起作用。我需要能够在任一控制器中更改一些变量,并在任一控制器中访问这些变量。
我试过直接在界面控制器中设置一个变量,目前用这种方式不可见:
InterfaceController2().variable = false
但是,这并没有起作用(如预期的那样),因为它没有访问该接口控制器的当前实例化实例。
我正在考虑某种全局变量情况,或者将首选项存储在 UserDefaults 中,但我觉得必须有更好的方法。
最佳选择:如果您的控制器有一个共同的父级,您可以使用委托方法来 pass/retrieve 来自共同父级的值。
Alt:您可以创建一个共享实例来存储您的值,您的控制器可以 update/retrieve 从那里获取值。
最终选择:有点恶心,但你可以使用 NSNotificationCenter。 (a) 在所有控制器中添加观察者,(b) post 值更新时通知。然后 (c) 在通知处理程序中更新控制器中的本地值。
您可以使用单例。创建单例最简单的方法是让你想要在 InterfaceControllers
和 class/static 属性.
您可以这样创建它:
class CommonClass {
static var mySingleton = true
}
然后像这样从您的 InterfaceController
访问它:
CommonClass.mySingleton = false
.
您在使用单例时应该小心,因为它们可以从您的代码的任何地方访问,所以它们可能被误用为全局变量,这可能有其缺陷。
查看 this 文章了解有关单例的更多详细信息。