[英]Pass data between view controllers constantly without a segue? USING SWIFT
注意:我試圖以快速而非客觀的方式解決此問題。
我正在制作一個具有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
您可以在自己的文件中創建一個全局變量,然后在兩個視圖控制器中調用該變量:
struct Variables {
static var coinsVariable = 0
}
//call
Variables.coinsVariable = 10
您也可以制定協議,在其中設置函數來更新coinValue。 然后,您可以在ViewControllers中將其用作委托,並從委托中的方法獲取值。 檢查Apple文檔如何使用協議。
您可以使用通知。 我不知道它們如何在Swift中工作,但是在Objective C中,您可以發布VariableShouldIncreaseNotification
和VariableShouldDecreaseNotification
。
然后,您可以擁有第三個對象來偵聽這些通知並跟蹤當前值,或者可以確定其中一個ViewController是該變量的所有者,並且它應該偵聽來自另一個的通知。
無論哪種方式,通知都使消息發送與消息處理脫鈎,因此以后在需要時更容易移動消息。
將具有變量V的VC A傳遞給B的引用-現在B可以處理A的屬性
如果更復雜,請考慮使用符合A的協議來正式化“合同”
認為被接受的答案很糟糕(我認為),我認為我會為其他人提供一個更明智的答案。
請注意,這也不完美,但是更好。 在初始視圖控制器中創建一個變量。
接下來,在tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
函數中創建一個indexPath.row的切換實例,如下所示(請注意,單元格從索引0開始):
switch indexPath.row {
case 0:
...
default:
...
}
然后,在其中一種情況下,將所需的值分配給之前創建的變量。 執行self.performSegueWithIdentifier
,然后添加以下函數:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "SegueIdentifier") {
let destination = segue.destinationViewController as! DestinationViewControllerClass
destination.variable = self.variable
}
}
顯然,使用您要用於將變量傳遞到的視圖控制器的類(您的情況下是prissViewController)以及將變量名更改為變量名(分別為coins1和self.coins2),將標識符,DestinationViewControllerClass更改為您的標識符,DestinationViewControllerClass )。
實現此目的的一種可能方法是使用第三類,該類擁有變量。 如果將此類設為單例,則兩個視圖控制器將能夠訪問相同的值。
有關如何在Swift中創建單例的信息,可以在此Stack Overflow問題中找到 。 但是,請確保使變量訪問線程安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.