ReactiveSwift 可变 属性 具有只读 public 访问权限

ReactiveSwift mutable property with read only public access

我有一个 class 枚举 属性 state。这个 属性 的值(我指的是 ReactiveSwift.Property 的值)需要被其他 classes 访问和观察,但值的变化应该是私有的。目前是这样实现的:

enum State {
    case stopped, running, paused
}

var state: Property<State> {
    return Property(mutableState)
}
fileprivate let mutableState = MutableProperty<State>(.stopped)

此模式允许我在 class 文件中修改 mutableState 属性。同时在 class 状态之外仅供阅读和观察。

问题是是否有办法使用单个 属性 来实现类似的事情?也可能有人可以为相同的解决方案建议更好的模式?

根据您想改变状态的位置,您可以尝试执行以下任一操作:

private(set) var state: Property<State>

或者如果您从扩展名修改它但仍然是同一个文件

fileprivate(set) var state: Property<State>

我想不出有什么方法可以用一个 属性 来做到这一点。我对您的代码所做的唯一调整是使 state 成为存储的 属性 而不是每次访问时新创建的计算 属性:

class Foo {
    let state: Property<State>

    fileprivate let mutableState = MutableProperty<State>(.stopped)

    init() {
        state = Property(mutableState)
    }
}