【问题标题】:Can Swift protocols be singleton?Swift 协议可以是单例的吗?
【发布时间】:2016-03-02 20:06:08
【问题描述】:

我尝试过对单例使用单行单例初始化(如在类中),以下是一些错误截图:

您能否帮助我理解这些错误,以及单例协议是否可能? 提前致谢

【问题讨论】:

  • 您不能实例化协议的实例,只能实例化协议采用者
  • 我不明白这样做意味着什么。单例是一个实例,但您不创建协议实例。相反,您创建可以实现协议的类的实例。

标签: swift singleton swift-protocols


【解决方案1】:

协议本身不能是单例。那没有任何意义。协议是其他类型遵循的东西。

但是,如果您想声明符合Singleton 的内容遵循某些规则,例如提供sharedInstance,那很好。您的语法不正确。您需要使用 varget 而不是 let

protocol Singleton {
    static var sharedInstance: Self { get }
}

原则上,您可以通过提供默认实现来自动创建此实例,但 Swift 不允许您在扩展中创建存储。虽然可以通过某种全局缓存来解决这个问题,但很难想象这值得麻烦。

【讨论】:

  • 感谢您的回答。能否解释一下:But if you wanted to declare that things that conform to Singleton follow some rule, such as offering a sharedInstance
  • 任何声称符合 Singleton 的东西都需要提供 sharedInstance 属性。这就是协议的用途。您仍然需要为每种类型实现该属性。 (请注意,如果您尝试自动化单例构造,那么您几乎肯定会过度使用单例。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多