具有只读公共访问权限的ReactiveSwift可变属性

时间:2017-04-18 10:16:37

标签: swift reactive-swift

我有一个enum属性state的类。此属性的值(按值我的意思是ReactiveSwift.Property的值)需要被其他类访问和观察,但值更改应该是私有的。目前,它以这样的方式实施:

enum State {
    case stopped, running, paused
}

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

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

问题是是否有办法使用单一属性实现类似的东西?也许有人可以为同一个解决方案建议一个更好的模式?

2 个答案:

答案 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>