簡體   English   中英

不斷地在視圖控制器之間傳遞數據而不會引起沖突? 使用SWIFT

[英]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中,您可以發布VariableShouldIncreaseNotificationVariableShouldDecreaseNotification

然后,您可以擁有第三個對象來偵聽這些通知並跟蹤當前值,或者可以確定其中一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM