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)
}
}
我有一个 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)
}
}