我有一个全局变量,需要在ViewControllers之间共享。
在Objective-C中,我可以定义一个静态变量,但在Swift中找不到定义全局变量的方法。
你知道怎么做吗?
来自Swift官方编程指南:
全局变量是在任何函数、方法、闭包或类型上下文。全局常数和变量总是懒散地计算。
您可以在任何文件中定义它,也可以在当前module
中的任何位置访问它。因此,您可以在文件中任何范围之外的某个位置定义它。不需要CCD_ 2,并且所有全局变量都是延迟计算的。
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"
在任何方法或闭包之外定义的全局变量都可以通过使用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")
获取字符串值:
let key = defaults.object(forKey: "StringKey") as? [String] ?? [String]()
获取整数值:
let key = defaults.integer(forKey: "IntegerKey")