Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在选项卡式视图控制器之间以Swift方式传递简单变量数据(更新标签)_Ios_Swift_Uiviewcontroller - Fatal编程技术网

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

Ios 在选项卡式视图控制器之间以Swift方式传递简单变量数据(更新标签),ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我的情况很简单: 我创建一个新的文件选项卡式应用程序,然后默认情况下分别获得选项卡栏控制器和第一视图控制器VC1和第二视图控制器VC2 我在“totalCash”VC1和VC2上都贴了一个标签。在VC1中,我做了一个简单的等式。假设X=y-z。在VC1中执行totalCash.text并更新我的标签,一切都很好 现在我想学习: 当我在VC1中更新我的标签时,我如何使其在单击模拟器中的第二个选项卡时,VC2中的标签也用该值更新,反之亦然。因此,如果我在VC2中“购买更多物品”,并且我的总现金下降,

我的情况很简单:

我创建一个新的文件选项卡式应用程序,然后默认情况下分别获得选项卡栏控制器和第一视图控制器VC1和第二视图控制器VC2

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

现在我想学习:


当我在VC1中更新我的标签时,我如何使其在单击模拟器中的第二个选项卡时,VC2中的标签也用该值更新,反之亦然。因此,如果我在VC2中“购买更多物品”,并且我的总现金下降,当我单击选项卡并返回时,它会在VC1的标签中更新?

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

如果所有VC共享数据,则可以将UITabBarController子类化,并在其中添加一个变量。然后每个VC都可以调用self.tabBarController.myVariableName。使用KVO监视更新。就像Jonny在评论中说的

如果数据在整个应用程序中共享,则可以使用singleton共享公共数据。单身人士很难管理,也很难跟踪变化

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"

创建一个超出viewcontroller范围的变量,即全局变量,然后在两个视图控制器中访问其值好的,非常感谢!所以我对斯威夫特还是个新手,刚上完课程的第三周。如何创建每个VC都可以访问的全局变量?基本上,数据在所有选项卡之间共享,但每个VC都有自己的功能。例如,VC 1,概述你总共有多少钱,VC 2商店,它显示你有多少钱,但允许你购买物品,并从总现金中减去这些物品的成本,这将反映在VC1和VC2最后一个问题中,因此我可以在两个选项卡中为我的标签显示变量sharedInt或sharedString,这很好!但是,如果我在VC2中更新sharedInt,那么如何使该更新也在VC1中发生呢?基本上,我能够更新Singleton fileKVO中的变量,请参见示例