2015-03-19 19 views
2

注意:我試圖用swift解決這個問題,而不是客觀的c。在視圖控制器之間不斷傳遞數據而不會出現輪廓?使用SWIFT

我正在做一個應用程序有2個視圖控制器,其中一個視圖控制器作業是從變量中扣除點,而其他視圖控制器作業是爲該變量添加點。

我該如何讓兩個視圖控制器共享相同的變量,或者不斷地在它們之間傳遞變量?

請注意,2視圖控制器連接到一個標籤欄控制器,所以我不能使用賽格。我曾嘗試使用此代碼,但它不起作用。有什麼建議麼?

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

將變量存儲在兩個控制器都參照的對象中。 – 2015-03-19 12:52:30

回答

1

你能在它自己的文件中的全局變量,並調用該變量在這兩個視圖控制器:

struct Variables { 
    static var coinsVariable = 0 
} 

//call 
Variables.coinsVariable = 10 

你也可以做一個協議,您可以設置一個函數來更新coinValue。然後你可以在你的ViewControllers中作爲委託使用它,並從委託中的方法中獲取值。 Check the Apple Documentation how to use protocols.

+4

那樣會導致混亂 - 不要讓數據交換的全局變化 – 2015-03-19 13:08:07

+0

@ Daij-Djan我總是看到有人這樣說,但我不明白爲什麼 – 2017-04-11 03:56:29

0

完成此操作的一種可能方法是使用第三個類,它包含變量。如果您將此類設爲單例,則兩個視圖控制器都將能夠訪問相同的值。

有關如何在Swift中創建單例的信息,請參見Stack Overflow question。 但請確保自己能夠使可變訪問線程安全。

1

您可以使用通知。我不知道他們在Swift中的工作方式,但在Objective C中,您可以發佈VariableShouldIncreaseNotificationVariableShouldDecreaseNotification

然後,您可以有第三個對象來偵聽這些通知並跟蹤當前值,或者您可以決定其中一個ViewController是變量的所有者,並且應該偵聽來自另一個的通知。

無論採用哪種方式,通知都會保持消息發送與消息處理的分離,所以如果需要,稍後可以更輕鬆地移動它。

1

傳遞有變到B參考您的VC A - 現在B可在A的屬性

工作,如果它是關於使用一個符合協議正式的「契約」稍微複雜一點思考

1

由於接受的答案是可怕的(在我看來),我認爲我會給其他人一個更明智的答案。

請注意,這也不完美,但更好。 在初始視圖控制器內創建一個變量。

接下來,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 
    } 

} 

顯然chaning「SegueIdentifer」與您的標識符,DestinationViewControllerClass與類您正在使用的視圖控制器,你要傳遞的變量(在你的情況prizesViewController )和變量名稱(分別爲coins1和self.coins2)。

相關問題