Swift 中的最佳实践是什么?
选项 1:
class SomeManager {
static var sharedManager = SomeManager()
var someVariable: String?
}
然后
let something = SomeManager.sharedManager().someVariable
选项 2:
class SomeManager {
static var someVariable: String?
}
然后
let something = SomeManager.someVariable
tl;dr
因为需要其他实例而存储可变状态时的选项 1(类或结构)。
当您想要存储静态变量时的选项 2(范围内的全局变量),因为它更快并且使用更少的内存。
带有变量的单例类(或结构)
全局状态通常被认为是“坏事”。这很难考虑,会导致问题,但有时是不可避免的。
- 如果您想拥有多个
SomeManager
实例,请创建一个类。
- 单例可以是很好的默认实例,但在某些极端情况下您可能希望具有单独的行为(测试)。
- 依赖注入(inject)...如果
SomeManager
正在存储全局状态,那么这是一个相关的大话题。
静态变量
- 总是在
someVariable
是常量时使用。
static var sharedManager = SomeManager()
不需要额外的存储空间;你只使用你实际需要的内存。
- 稍微快一些,因为您不需要将
sharedManager
加载到内存中然后访问它的成员 someVariable
。您直接访问 someVariable
。
额外提示:
在选项 2 中,您可以创建 SomeManager
,即使它什么都不做。您可以通过将 SomeManager
转换为没有大小写的枚举来防止这种情况。
enum SomeManager {
static var someVariable: String?
}
您仍然可以这样做:
SomeManager.someVariable
但是你不能这样做
let manager = SomeManger()