如何创建一个全局变量?

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

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

你知道怎么做吗?

201764 次浏览

来自官方的 Swift 节目 向导:

全局变量是在任何 函数、方法、闭包或类型上下文 变量总是采用惰性计算。

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

 var yourVariable = "someString"

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

但是您应该避免这种情况,因为全局变量不利于应用程序状态,而且主要是由于缺陷造成的。

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

struct MyVariables {
static var yourVariable = "someString"
}

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

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


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

在任何方法或闭包之外定义的全局变量可以通过使用 private 关键字来限制范围。

import UIKit


// MARK: Local Constants


private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"

如果你想在你所有的课程中使用它,你可以使用:

public var yourVariable = "something"

如果你只想在一个类中使用,你可以使用:

var yourVariable = "something"

如果你实际上并不想要一个全局变量,而是想要保存那些即使应用程序关闭也依然存在的值,你可以这样做:

如果您实际上并不想在视图控制器之间传递数据,而只是想存储一个全局变量,您可以这样做:

这对如何在 Swift 5: https://www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-userdefaults中做到这一点给出了很好的解释

摘要:

设置值:

let defaults = UserDefaults.standard
defaults.set("value", forKey: "key")

获取 String 值:

let key = defaults.object(forKey: "StringKey") as? [String] ?? [String]()

要获得整数值:

let key = defaults.integer(forKey: "IntegerKey")