我有一个全局变量需要在多个视图控制器之间共享。
在 Objective-C 中,我可以定义一个静态变量,但我找不到在 Swift 中定义全局变量的方法。
您知道如何做吗?
我有一个全局变量需要在多个视图控制器之间共享。
在 Objective-C 中,我可以定义一个静态变量,但我找不到在 Swift 中定义全局变量的方法。
您知道如何做吗?
从官方的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"
MyVariables
,因此MyViewState
看起来像是从https://dev59.com/02Af5IYBdhLWcg3wQQq4#24868789复制/粘贴出现错误 :) - Martin Rstruct
控制所有变量的可见性,并且如果适当,还可以将它们绑定到不同的逻辑单元中。例如应用程序的音频常量和通用常量。 - codester通过使用 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")