2017-04-18 21 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