Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不同的类中更改变量?(iOS,Swift)_Ios_Swift_Class_Variables - Fatal编程技术网

如何在不同的类中更改变量?(iOS,Swift)

如何在不同的类中更改变量?(iOS,Swift),ios,swift,class,variables,Ios,Swift,Class,Variables,我在故事板中有3个视图控制器。它们被命名为“字母”、“数字”和“其他” 我想要的是一个变量,它会根据上次使用的类别进行更改 例如:用户转到字母查看控制器(var categories=“Letters”),然后转到其他查看控制器,并且能够使用“categories”变量(仍然是“字母”)。用户转到Numbers视图控制器(var categories=“Numbers”),然后转到其他视图控制器,并且能够使用categories变量(现在是数字“) 我不确定我的问题和例子是否足够清楚,他们是否可

我在故事板中有3个视图控制器。它们被命名为“字母”、“数字”和“其他”

我想要的是一个变量,它会根据上次使用的类别进行更改

例如:用户转到
字母查看控制器(
var categories=“Letters”
),然后转到
其他查看控制器,并且能够使用“categories”变量(仍然是
“字母”
)。用户转到
Numbers
视图控制器(
var categories=“Numbers”
),然后转到
其他视图控制器,并且能够使用
categories
变量(现在是
数字“

我不确定我的问题和例子是否足够清楚,他们是否可以随意提问,我将尝试进一步解释

任何帮助都将不胜感激


提前感谢。

有很多方法可以做到这一点,但关键的概念是,您不会更改其他类中的变量,而是更改类的实例(对象)中的内容

我会尽量保持简单

因此,您可以创建一个类,该类包含应用程序状态之类的内容

public class AppState {
    public var category: String? = nil
    public static let shared = AppState()
}
然后,在代码中的任何地方,您都可以

AppState.shared.category = "Letters"


这样做不是最好的方法,但它会起作用,而且很简单。更进一步,您可以了解依赖项注入。使用该方法,将不会有全局共享实例,而是将适当的AppState对象传递给需要它的对象。

最好的方法是在每个视图控制器上创建一个名为
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]()
数字视图控制器

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]()

听起来您想在视图控制器之间传递“categories”变量。您可以在显示每个视图控制器时执行此操作。我会在下面贴一个答案。我会马上调查的。如果它能按我需要的方式工作,请给我回复。它工作得很好。但是,如果我在switch语句中使用该字符串,可选的会成为障碍吗?如果是,那么最好的方法是什么?如果您有默认类别,则不需要将类别设置为可选。指定默认值,您就不再需要展开。这消除了以后意外设置零的可能性。哦,好的,谢谢!不知道为什么我自己没有想到这一点=]谢谢你的快速回复。我会检查每个答案,看看哪一个最适合我的程序(最通用)。没问题。正如Lou Franco暗示的那样,如果可能的话,应该避免全球国家。