5

我有一个带有枚举属性的类state。这个属性的值(我ReactiveSwift.Property的意思是值)需要被其他类访问和观察,但值的变化应该是私有的。目前它以这样的方式实现:

enum State {
    case stopped, running, paused
}

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

这种模式允许我修改mutableState类文件中的属性。同时课外状态只能用于阅读和观察。

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

4

2 回答 2

7

我想不出任何方法可以用单个属性来做到这一点。我将对您的代码进行的唯一调整是创建state一个存储属性,而不是每次访问时新创建的计算属性:

class Foo {
    let state: Property<State>

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

    init() {
        state = Property(mutableState)
    }
}
于 2017-04-18T13:22:39.087 回答
1

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

private(set) var state: Property<State>

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

fileprivate(set) var state: Property<State>
于 2017-04-18T10:29:01.917 回答