我有一个带有枚举属性state
的类。此属性的值(按值我是指ReactiveSwift.Property
的值(需要由其他类访问和观察,但是值更改应该是私有的。目前,它以这样的方式实现:
enum State {
case stopped, running, paused
}
var state: Property<State> {
return Property(mutableState)
}
fileprivate let mutableState = MutableProperty<State>(.stopped)
这种模式使我可以在类文件中修改mutableState
属性。同时,班级状态以外的时间仅用于阅读和观察。
问题是,是否有一种使用单个属性实施类似事物的方法?也许有人可以为同一解决方案提出更好的模式?
我想不出任何方法可以用一个属性来执行此操作。我对您的代码进行的唯一调整是使state
成为存储的属性,而不是每次访问时都新创建的计算属性:
class Foo {
let state: Property<State>
fileprivate let mutableState = MutableProperty<State>(.stopped)
init() {
state = Property(mutableState)
}
}
取决于您要在何处突变状态,您可以尝试做任何一个:
private(set) var state: Property<State>
或从扩展程序中修改它,但仍然是相同的文件
fileprivate(set) var state: Property<State>