Swift中属性声明时使用`set`关键字的作用是什么?
Swift 中
private(set) 修饰静态变量的作用 这行代码是 Swift 里实现单例的常用写法,核心是通过 private(set) 精准控制属性的读写权限:
static:让shared成为类的静态属性,属于类本身而非类的实例,整个程序运行期间只会存在这一个实例。private(set):拆分读写权限的关键:- 类外部的代码仅能读取
shared的值,无法直接修改(比如不能执行UserPreferences.shared = UserPreferences()这类赋值操作),保证了单例实例的唯一性不被外部破坏。 - 类内部的代码可以修改
shared的值,比如类里的重置方法可以重新赋值,给类自身留了调整实例的灵活度。
- 类外部的代码仅能读取
对比两种极端情况就能明白它的必要性:
- 若只写
static var shared:外部既能读也能随意修改,单例的唯一性毫无保障。 - 若写
static private var shared:外部连读取权限都没有,完全没法使用这个单例实例。
private(set) 本质是一种「只读对外,可写对内」的权限控制方案,完美适配单例这种需要外部访问但不能随意篡改的场景。
内容的提问来源于stack exchange,提问作者hsiraaH
相关产品推荐
相关产品推荐

