3

我有多个界面控制器,它们都以基于分页的格式同时打开。我需要在这些接口控制器之间共享信息。

对于我的用例,我不能强迫用户使用其他接口控制器之一(通过启动 segue),所以这些解决方案对我不起作用。我需要能够更改任一控制器中的一些变量,并在任一控制器中访问这些变量。

我尝试直接在接口控制器中设置一个当前不可见的变量:

InterfaceController2().variable = false

但是,这不起作用(如预期的那样),因为它没有访问该接口控制器的当前实例化实例。

我正在考虑某种全局变量情况,或者在 UserDefaults 中存储首选项,但我觉得必须有更好的方法。

4

2 回答 2

2

你可以使用单例。创建单例的最简单方法是创建要在InterfaceControllers类/静态属性之间共享的变量。

您可以像这样创建它:

class CommonClass {
    static var mySingleton = true
}

然后InterfaceController像这样从你的 s 访问它CommonClass.mySingleton = false

使用单例时应该小心,因为它们可以从代码的任何位置访问,因此它们可能被误用为像全局变量一样,这可能有缺陷。

查看这篇文章以了解有关单例的更多详细信息。

于 2017-07-27T09:19:20.557 回答
1

最佳选择:如果您的控制器有一个共同的父级,您可以使用委托方法从共同的父级传递/检索值。

Alt:您可以创建一个共享实例来存储您的值,并且您的控制器可以从那里更新/检索值。

最后的选择:这有点恶心,但你可以使用 NSNotificationCenter。(a) 在所有控制器中添加观察者,(b) 每当值更新时发布通知。然后 (c) 在通知处理程序中更新控制器中的本地值。

于 2017-07-27T01:14:02.080 回答