我有一个enum属性state
的类。此属性的值(按值我的意思是ReactiveSwift.Property
的值)需要被其他类访问和观察,但值更改应该是私有的。目前,它以这样的方式实施:
enum State {
case stopped, running, paused
}
var state: Property<State> {
return Property(mutableState)
}
fileprivate let mutableState = MutableProperty<State>(.stopped)
这种模式允许我修改类文件中的mutableState
属性。同时,课外状态仅适用于阅读和观察。
问题是是否有办法使用单一属性实现类似的东西?也许有人可以为同一个解决方案建议一个更好的模式?
答案 0 :(得分:7)
我无法想到用单一财产做任何事情。我将对您的代码进行的唯一调整是使state
成为存储的属性,而不是每次访问时新创建的计算属性:
class Foo {
let state: Property<State>
fileprivate let mutableState = MutableProperty<State>(.stopped)
init() {
state = Property(mutableState)
}
}
答案 1 :(得分:1)
根据您要改变状态的位置,您可以尝试执行以下任一操作:
private(set) var state: Property<State>
或者如果您从扩展程序修改它但仍然是同一个文件
fileprivate(set) var state: Property<State>