【发布时间】:2021-02-09 13:52:13
【问题描述】:
上下文
你好,
我喜欢使用全局变量来调用管理器或服务来处理某些代码。
但是我的代码分析器 (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 不也一样吗? 如果是这样,除了我上面展示的方法之外,还有更好的方法吗?
我很想听听您的见解!
【问题讨论】:
-
您应该始终尽量避免使用全局变量。首先学习如何使用单例,然后学习如何使用依赖注入。
-
感谢@emrepun,看起来很有趣,稍后会查看!
-
@nicksamo 如果我们谈论 SwiftUI,你会推荐使用 EnvironmentObject 而不是所有单例用法吗?快速来源:mokacoding.com/blog/swiftui-dependency-injection 或者你觉得单例(不是全局变量)还有它们的位置吗?
-
创建一个
class App { static func logout() { ... } },这样您就可以将其用作App.logout()。没有单例(至少没有公开的,如果需要,内部 App 仍然可以作为单例工作),没有全局变量。
标签: ios swift oop swiftui global-variables