ReactivesWift可变形的属性仅读取公共访问



我有一个带有枚举属性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>

最新更新