注意:我试图用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
答案 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中,您可以发布VariableShouldIncreaseNotification
和VariableShouldDecreaseNotification
。
然后,你有第三个对象来监听这些通知并跟踪当前值,或者你可以决定其中一个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。 但是,请确保自己使变量访问线程安全。