ami*_*mir 3 singleton protocols swift
我有以下协议定义具有属性的单例:
protocol SingletonProtocol {
static var shared: SingletonProtocol { get }
var variable : Int { get set }
}
Run Code Online (Sandbox Code Playgroud)
以及实现此协议的以下类:
class Singleton : SingletonProtocol{
static let shared : SingletonProtocol = Singleton()
var variable = 4
}
Run Code Online (Sandbox Code Playgroud)
如果我打电话:
Singleton.shared.variable = 5
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
change 'let' to 'var' to make it mutable
Run Code Online (Sandbox Code Playgroud)
如果我在没有协议的情况下实现此类,则不会收到错误并且可以更改变量。我可以通过添加setVariable:
方法来解决这个问题,但我想直接访问和修改变量。
如何编写一个协议来定义带有可修改变量的单例?
使协议仅适用于类(结构将无法遵守此协议):
protocol SingletonProtocol: AnyObject {
static var shared: SingletonProtocol { get }
var variable: Int { get set }
}
Run Code Online (Sandbox Code Playgroud)
现在您可以将shared
属性设置为let
class Singleton: SingletonProtocol {
static let shared: SingletonProtocol = Singleton()
var variable: Int = 0
}
Run Code Online (Sandbox Code Playgroud)