在没有segue的情况下,在视图控制器之间传递数据使用SWIFT

时间:2015-03-19 12:40:23

标签: ios swift uitabbarcontroller segue

注意:我试图用swift解决这个问题,而不是客观c。

我正在创建一个具有2个视图控制器的应用程序,其中一个视图控制器作业是从变量中扣除点,而其他视图控制器作业是为该变量添加点。

我怎样才能让两个视图控制器共享同一个变量,或者只是不断地在它们之间传递变量?

注意,2个视图控制器与标签栏控制器连接,所以我不能使用segue。我尝试过使用此代码,但它不起作用。有什么建议吗?

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
            var destviewcontroller: prizesViewController = segue.destinationViewController as prizesViewController
            //first other coins them mine
            destviewcontroller.coins1 = coins2

5 个答案:

答案 0 :(得分:1)

您可以在其自己的文件中创建一个全局变量,并在两个视图控制器中调用该变量:

struct Variables {
    static var coinsVariable = 0
}

//call
Variables.coinsVariable = 10

此外,您可以制定一个协议,您可以在其中设置更新coinValue的函数。然后,您可以在ViewControllers中将其用作委托,并从委托中的方法获取值。 Check the Apple Documentation how to use protocols.

答案 1 :(得分:1)

您可以使用通知。我不知道它们在Swift中的工作方式,但在Objective C中,您可以发布VariableShouldIncreaseNotificationVariableShouldDecreaseNotification

然后,你有第三个对象来监听这些通知并跟踪当前值,或者你可以决定其中一个ViewControllers是变量的所有者,它应该监听来自另一个的通知。 / p>

无论哪种方式,通知都会使邮件发送与邮件处理分离,因此如果需要,可以更轻松地将其移动。

答案 2 :(得分:1)

将具有VARIABLE的VC A传递给B - 现在B可以使用A的属性

如果更复杂,请考虑使用符合A的协议将“合同”正式化,

答案 3 :(得分:1)

看到接受的答案是可怕的(在我看来),我想我会给别人一个更明智的答案。

请注意,这也不完美,但更好。 在初始视图控制器中创建变量。

接下来,在munge :: (x -> y) -> (y -> (w, z)) -> w 函数中创建一个indexPath.row的switch case就像这样(记住单元格从索引0开始):

tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

然后在其中一个案例中将您想要的值分配给您之前创建的变量。 执行switch indexPath.row { case 0: ... default: ... } ,然后添加以下功能:

self.performSegueWithIdentifier

显然使用您的标识符来追踪“SegueIdentifer”,使用您要用于视图控制器的类的DestinationViewControllerClass,您希望将变量传递给(在您的情况下为prizesViewController),并将变量名称添加到您的变量名称(coins1和self) .coins2)。

答案 4 :(得分:0)

实现此目的的一种可能方法是使用第三个类来保存变量。如果将此类设为单例,则两个视图控制器都将能够访问相同的值。

有关如何在Swift中创建单身人士的信息,请参阅此Stack Overflow question。 但是,请确保自己使变量访问线程安全。