2017-04-18 19 views
3

我有一个enum属性类state。这个属性的值(我的意思是ReactiveSwift.Property的值)需要被其他类访问和观察,但是值更改应该是私有的。目前,它是在这样的方式来实现:ReactiveSwift可变属性只读公开访问

enum State { 
    case stopped, running, paused 
} 

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

这种模式让我修改类文件中mutableState财产。同时,课堂以外的状态只能用于阅读和观察。

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

回答

4

我可以”不要想办法用单一财产做到这一点。唯一的调整我会做你的代码是使state一个存储的属性,而不是被新的每次访问时创建一个计算的属性:

class Foo { 
    let state: Property<State> 

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

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

是的,但可能会让它懒散甚至会更好的解决方案。但是你的确有意义。 – iyuna

1

根据要变异的状态,你可以尝试做任何的:

private(set) var state: Property<State> 

,或者如果你从一个扩展修改,但仍然是相同的文件

fileprivate(set) var state: Property<State> 
+0

是啊,我想到这个问题。但是这允许我自己修改'state'属性。我需要修改'state'属性的值。我的意思是'ReactiveSwift.Property'以及'ReactiveSwift.MutableProperty'具有属性'value'。这是我需要修改的那个。抱歉混淆。 – iyuna