我有一个全局变量需要在 ViewController 之间共享。
在 Objective-C 中,我可以定义静态变量,但是在 Swift 中找不到定义全局变量的方法。
你知道怎么做吗?
来自官方的 Swift 节目 向导:
全局变量是在任何 函数、方法、闭包或类型上下文 变量总是采用惰性计算。
您可以在任何文件中定义它,并且可以在当前 module的任何位置访问它。 因此您可以在任何范围之外的文件中的某个地方定义它。不需要 static,所有全局变量都是延迟计算的。
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"
在任何方法或闭包之外定义的全局变量可以通过使用 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")