如何创建全局变量?


123

我有一个全局变量,需要在我的ViewController之间共享。

在Objective-C中,我可以定义静态变量,但是找不到在Swift中定义全局变量的方法。

您知道这样做的方法吗?




您可以在类外部定义变量或结构,然后可以在整个应用程序中访问该变量。
Chandni

Answers:


209

来自官方的Swift编程指南

全局变量是在任何函数,方法,闭包或类型上下文之外定义的变量。全局常数和变量总是延迟计算的。

您可以在任何文件中定义它,并且可以在module任何位置访问它。因此,您可以在任何范围之外的文件中的某个位置定义它。不需要static,所有全局变量都是延迟计算的。

 var yourVariable = "someString"

您可以从当前模块中的任何位置访问它。

但是,您应该避免这种情况,因为全局变量不利于应用程序状态,并且主要是错误的原因。

如该答案所示,在Swift中,您可以将它们封装在其中struct并可以在任何地方访问。您也可以在Swift中定义静态变量或常量。封装在struct

struct MyVariables {
    static var yourVariable = "someString"
}

您可以在任何类或任何地方使用此变量

let string = MyVariables.yourVariable
println("Global variable:\(string)")

//Changing value of it
MyVariables.yourVariable = "anotherString"

3
您的结构称为MyVariables,因此MyViewState看起来像是来自stackoverflow.com/a/24868789/1187415的复制/粘贴错误:)
Martin R

谢谢
MartinR

9
如果您从另一个答案中复制代码,则应明确声明(带有指向原始答案的链接)。比较stackoverflow.com/help/referencing
Martin R

1
知道了谢谢!但是全局变量和封装在struct之间有什么区别吗?
czzhengkw

3
“ MyVariables”不会被视为全球性的吗?如果我们将其声明为全局struct或变量,它将有什么不同?
萨蒂扬2015年


4

如果要在所有课程中使用它,可以使用:

public var yourVariable = "something"

如果您只想使用一个类,则可以使用:

var yourVariable = "something"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.