使用单例模式在Swift中创建管理器的最佳方法
在我们的应用程序中,我有两个简单管理器的示例使用单例模式在Swift中创建管理器的最佳方法,swift,swift3,singleton,Swift,Swift3,Singleton,在我们的应用程序中,我有两个简单管理器的示例 enum SomeStatus { case none case inProgress } class SomeManager { static let shared = SomeManager() private var _status: SomeStatus = .none var status: SomeStatus { get { return _status } } func c
enum SomeStatus {
case none
case inProgress
}
class SomeManager {
static let shared = SomeManager()
private var _status: SomeStatus = .none
var status: SomeStatus {
get { return _status }
}
func changeStatus(to status: SomeStatus) {
_status = status
}
}
let manager = SomeManager.shared
print (manager.status)
// none
manager.changeStatus(to: .inProgress)
print (manager.status)
// inProgress
在本例中,我隐藏了使用直接分配状态变量在经理之外更改状态的可能性。反正看起来不错
但我们可以用另一种方法
class SomeManager {
private static let shared = SomeManager()
private var _status: SomeStatus = .none
static var status: SomeStatus {
get { return shared._status }
}
static func changeStatus(to status: SomeStatus) {
shared._status = status
}
}
print (SomeManager.status)
// none
SomeManager.changeStatus(to: .inProgress)
print (SomeManager.status)
// inProgress
重点在于说明如何隐藏共享实例,但使用相同的单例模式
因此,问题是,在示例中,用例的最佳性能/方法是什么?阻止对属性的直接写访问的目的是什么?@MartinR,首先,它的封装和未来的控制变量。是的,我们可以使用observer属性,但对我来说,这是一种更干净的方法。你也可以使用一个普通的公共属性“控制未来的变量”。您通常不需要在swift中编写单独的setter和getter。@Sweeper您所说的,如果我们的属性有许多不同的逻辑,那么这个case status只有两个case,但是您所说的如果status将有20个case,例如,在某些情况下,我们根本不需要更改status。我们可以在另一个部门讨论这个问题。问题是,直接使用共享实例还是在方法内部使用静态方法和共享实例。