swift - 使用属性定义单例的协议
问题描述
我有以下协议,它定义了一个带有属性的单例:
protocol SingletonProtocol {
static var shared: SingletonProtocol { get }
var variable : Int { get set }
}
以及实现此协议的以下类:
class Singleton : SingletonProtocol{
static let shared : SingletonProtocol = Singleton()
var variable = 4
}
如果我打电话:
Singleton.shared.variable = 5
我收到以下错误:
change 'let' to 'var' to make it mutable
如果我在没有协议的情况下实现这个类,我不会收到错误,并且可以更改变量。我可以通过添加方法来解决这个问题,setVariable:
但我想直接访问和修改变量。
如何编写一个协议来定义一个带有可以修改的变量的单例?
解决方案
使协议仅可用于类(结构将无法符合此协议):
protocol SingletonProtocol: AnyObject {
static var shared: SingletonProtocol { get }
var variable: Int { get set }
}
现在您可以将shared
属性设置为 let
class Singleton: SingletonProtocol {
static let shared: SingletonProtocol = Singleton()
var variable: Int = 0
}
推荐阅读
- c# - 如何在没有数组的情况下拖放?
- c# - 如何使用 NPGSQL.GetBytes() 函数
- javascript - 是否可以在返回页面时显示过滤表/(搜索)结果?
- c++ - 从 bool* 到 void* 到 int* 的错误转换
- android - kotlin中如何扩大Fragment的视野范围?
- python - 计算特定列中的重复项
- youtube-iframe-api - 有什么方法可以检测 youtube iframe api 中的全屏事件?
- python - 检测图像中白色背景的有效方法
- python - kivy中的屏幕切换
- xml - 使用 shell 脚本从 xml 文件中提取最新版本