Swift - 什么是全局变量更好的替代品?

Swift - What is a better alternative to Global Variables?

上下文

你好,
我喜欢使用全局变量来调用管理器或服务来处理某些代码。
但是我的代码分析器 (SonarQube) 中出现了代码异味。

问题

形式A和形式B有很大区别吗?或者我根本不应该使用任何一个? 我更喜欢形式 A,但我想避免/抑制/解决代码异味。

表格 A

一些例子,我更喜欢的是:

app.logout()
cameraManager.doSomething()
userDefaults.set(.example, true)
analytics.logEvent(.clicked_button)
popupManager.showPopup(message: "Hello world!")

以上可以通过以下方式实现:

var app = Global()

class Global {

}

表格 B

另一种选择是:

class Global {
    private init() {}
    public static let app = Global()
}

用法将更改为 Global.app.logout()

代码味道

我部分同意这些观点,但表格 B 不是同样重要吗? 如果是这样,是否有比我上面显示的更好的方法?

我很想听听您的见解!

您面临的问题是全局变量本身通常被认为是一种代码味道。

本质上,您是在说“我喜欢 <code smell>,但我的代码分析器将其标记为代码异味。”

您是否考虑过让您的经理对象成为单身人士?考虑一下 Apple 用于 UserDefaults 之类的模式(一个 class var standard,returns 共享 UserDefaults 对象。)

编辑:

重读你的问题,我想这就是你在表单 B 中的建议。这使得静态变量成为 class 的 class 变量,并将对象变成单例。这与全局不太一样。