在 Swift 选项卡式视图控制器之间传递简单变量数据(更新标签)

Passing simple variable data (updating labels) in Swift between tabbed view controllers

我的情况很简单:

我创建了一个新文件(选项卡式应用程序),然后默认获得选项卡栏控制器以及第一个和第二个视图控制器(分别为 VC1 和 VC2)。

我在 'totalCash' VC1 和 VC2 上都贴上了标签。在 VC1 中,我做了一个简单的等式。假设 X = y-z。执行 totalCash.text 并在 VC1 中更新我的标签,一切正常!

现在我想学习:

当我在 VC1 中更新我的标签时,如何才能在模拟器中单击第二个选项卡时,VC2 中的标签也会更新为该值,反之亦然。因此,如果我在 VC2 中 'buy more items' 并且我的 totalCash 下降,当我单击选项卡并返回时,它会在 VC1 中的标签中更新?

这取决于您设置的数据。如果每个 VC 管理自己的数据,而您只需要更新其他选项卡中的数据,那么使用 NSNotificationCenter 发送任何更新通知。

如果你们 VC 共享数据,您可以继承 UITabBarController 并在其中添加一个变量。然后每个VC可以调用self.tabBarController.myVariableName。使用 KVO 监控更新。就像 Jonny 在评论中所说的那样

如果整个应用共享数据,您可以使用单例来共享公共数据。 (单身人士很难管理,也很难跟踪变化)

swift

的单例模式
class Singleton {

    var sharedString = "shared string"

    var sharedInt = 54

    class var sharedInstance: Singleton {
        struct Static {
            static var instance: Singleton?
            static var token: dispatch_once_t = 0
        }

        dispatch_once(&Static.token) {
            Static.instance = Singleton()
        }

        return Static.instance!
    }
}

调用Singleton.sharedInstance获取共享对象。

您可以像

一样设置或获取共享变量
    let shared = Singleton.sharedInstance

    let sharedString = shared.sharedString

   shared.sharedString = "hello world"