Swift 创建可从所有视图控制器访问的变量

Swift 创建可从所有视图控制器访问的变量,swift,firebase,Swift,Firebase,我想保存一个可以从所有视图控制器和文件访问的变量。我需要做什么才能完成这项工作 我有一个文本字段,用于创建输入“电子邮件” 并且必须保留这些信息,因此当添加信息时,它会以文件名(电子邮件/用户名)进入数据库 使用Singleton模式 将数据另存为 EmailManager.shared.email = textField.text! 从任何地方读它 let email = EmailManager.shared.email Razi Singleton方法非常好。我将留下另一个在swift

我想保存一个可以从所有视图控制器和文件访问的变量。我需要做什么才能完成这项工作

我有一个文本字段,用于创建输入“电子邮件” 并且必须保留这些信息,因此当添加信息时,它会以文件名(电子邮件/用户名)进入数据库

使用
Singleton
模式

将数据另存为

EmailManager.shared.email = textField.text!
从任何地方读它

let email = EmailManager.shared.email

Razi Singleton方法非常好。我将留下另一个在swift中特别使用的结构:

struct UserData {
    static var email = "hi@contact.com"
} 
因此,您可以在应用程序中的任何位置使用:)


将来,请将此主题进一步视为“全局变量”和更好的方法,特别是在涉及安全性和数据持久性时。

使用
AppDelegate
。您不是在以其他方式使用Firebase Auth,也许你也可以在有几个答案的地方使用一个单一模式——这是否是基于整个问题的最佳解决方案,这是有争议的。为什么这个问题被标记为Firebase?您对电子邮件地址做了什么?它是否作为密钥存储在您的firebase中?如果是这样,你可能想考虑使用用户的UID来存储他们的“东西”,它总是可以用“让UID= Auth.Author”.CurruthUs.UID“”来检索。也许关于您的用例的更多信息将揭示一个合适的答案。(我认为单例是可以的,但它可能不适合这个用例)。我不确定这是对实际问题的最佳答案。从表面上看,问题似乎是如何存储一个全局var,我不相信OP是在追求这个。我认为他们想要的是有一个一致的密钥来在Firebase中存储用户数据;他们想使用电子邮件地址。更好的解决方案是将其存储在Firebase用户对象.currentUser属性中。此外,使用电子邮件地址作为密钥也存在挑战(非法字符、电子邮件地址更改等),因此有更好的选项来生成唯一密钥(uid)。
struct UserData {
    static var email = "hi@contact.com"
} 
//Read/Write
UserData.email = "somethingElse"