在 swift 中,如何在应用程序委托中实现一个变量,以便在应用程序的任何地方检索它?

Posted

技术标签:

【中文标题】在 swift 中,如何在应用程序委托中实现一个变量,以便在应用程序的任何地方检索它?【英文标题】:In swift , how to implement a variable in the app delegate, in order to retrieve it everywhere in the app? 【发布时间】:2020-11-21 23:43:11 【问题描述】:

在 swift 中,如何在应用程序委托中创建一个变量以便在应用程序的任何地方检索它? 我不是在说 NSManagedObject

我知道它的开头是:

let appDelegate = UIApplication.shared.delegate as! AppDelegate

我有一个类 Personne

class Personne 
var One: String
var Two: Float

和另一个类来创建一个单例:

class PersonneController 
var shared = Personne()

在我的应用程序中,我创建了一个这样的实例:

var personne = Personne()

所以每个变量都在检索

personne.shared.myvariable

如何将 personne 放入应用委托中,以便从任何地方检索它?

【问题讨论】:

“为了在应用程序的任何地方检索它”虽然很诱人,但您绝对不希望这样。可以从任何地方访问的可变内容可以从任何地方更改,这意味着您无法轻松读取任何访问该值的代码。您的本地推理使您认为某些代码应该以一种方式运行,但它可以做完全其他的事情,因为其他模块可以在您的脚下访问和更改该全局值。它很容易成为一场噩梦 @Alexander-ReinstateMonica 总的来说你是对的,只是我采用的解决方案不同。这是很好地解释它的链接。 link @Monica 你真的很亲密。您正在寻找的内容称为 Singleton 并检查此 post 以及 【参考方案1】:

1 .在 AppDelegate 中创建“Personne”类的实例 ( var persnee = Personne())

2 。在您的 AppDelegate 中创建一个函数,该函数将返回 AppDelegate 的实例

类 func appDelegate() -> AppDelegate

返回 UIApplication.shared.delegate 为!应用代理

3 .你可以这样调用

AppDelegate.appDelegate()。坚持

【讨论】:

【参考方案2】:

类内

class AppDelegate..... 
  var name:String?

然后

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
print(appDelegate.name)

但是为此最好制作一个像这样的单例类

class Service 
  static let shared = Service()
  var name:String?

然后

print(Service.shared.name)

甚至将其设为全局变量

【讨论】:

【参考方案3】:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let aVariable = appDelegate.blabla

【讨论】:

以上是关于在 swift 中,如何在应用程序委托中实现一个变量,以便在应用程序的任何地方检索它?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中实现 PopOver

在 Swift 3 中实现 fetchedresultsviewcontroller

如何在 Swift 的单独类中设置 UITextField 的委托?

如何在 inputAccessoryView [Swift] 中实现滚动视图

将 Objective-C 委托方法与 swift 文件混合

在 Swift 中节流而不进行反应