2017-04-12 54 views
1

我在Storyboard中有3個View Controller。他們被命名爲「字母」,「數字」和「其他」。如何更改不同類中的變量? (iOS,Swift)

我想要的是一個變量,根據最後使用哪個類別進行更改。

實施例:用戶轉到Letters視圖控制器(var categories = "Letters"),然後到Other視圖控制器,並且能夠使用「類別」變量(這仍然是"Letters")。用戶轉到Numbers視圖控制器(var categories = "Numbers"),然後轉到Other視圖控制器,並且能夠使用categories變量(現在爲"Numbers")。

我不確定我的問題和例子是否足夠清楚,如果他們沒有隨意問,我會嘗試進一步解釋。

任何幫助將不勝感激。

在此先感謝。

+0

聽起來像是你想通過您的視圖控制器之間的 '類別' 的變量。您可以在呈現每個視圖控制器時執行此操作。我會在 –

回答

1

有很多方法可以做到這一點,但關鍵的概念是,您不會在其他類中更改變量,而是在類的實例(對象)中更改事物。

我會盡量保持這個簡單。

所以,你可以做出具有應用國家各種事情

public class AppState { 
    public var category: String? = nil 
    public static let shared = AppState() 
} 

然後,在你的代碼的任何地方一類,你可以做

AppState.shared.category = "Letters" 

或者

if let currentCategory = AppState.shared.category { 
    // use currentCategory here 
} 

這樣做並非最佳的方式,但它會工作,而且很簡單。再進一步,你可以學習依賴注入。使用它,不會有全局共享實例,而是將相應的AppState對象傳遞給需要它的對象。

+0

以下發布答案,謝謝。我會馬上看看它。如果它按我需要的方式工作,請回復您。 –

+0

它的作品非常漂亮。但是,如果我在switch語句中使用String,那麼可選方法會如何實現,如果是這樣,解開它的最佳方法是什麼? –

+0

如果您有一個默認類別,則不需要將類別設置爲可選。指定默認值,您不需要解包。這消除了後來偶然設置零的可能性。 – ObjectAlchemist

0

要做到這一點,最好的方法是在每個視圖控制器上創建一個名爲categories的變量,並在呈現下一個視圖控制器之前爲其指定一個值。

例:
快報 - 視圖 - 控制器

var categories = [String]() 

    func goToNextViewController() 
    { 
     let numbersVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "numbersVC") 
     numbersVC.categories = self.categories 
     self.presentViewController(numbersVC, animated: true, completion: nil) 
    } 

號 - 視圖 - 控制器

var categories = [String]() 
+0

感謝您的快速回復。我會檢查每個答案,看看哪一個適合我的程序最好(最通用)。 –

+0

沒問題。正如Lou Franco所暗示的那樣,如果可能的話,全球國家應該避免。 –