使用单例模式在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。我们可以在另一个部门讨论这个问题。问题是,直接使用共享实例还是在方法内部使用静态方法和共享实例。