2017-04-18 1 views
3

私は列挙型プロパティstateを持つクラスを持っています。このプロパティの値(値は平均でReactiveSwift.Propertyの値)は、他のクラスからアクセスして監視する必要がありますが、値の変更はプライベートである必要があります。現在は、このような方法で実装されていますReactiveSwift読み取り専用publicアクセス可能な可変プロパティ

enum State { 
    case stopped, running, paused 
} 

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

このパターンは、私はクラスファイル内mutableStateプロパティを変更することができます。同時に、クラス状態の外には、読書と観察のためだけに利用可能です。

質問は、単一のプロパティを使用して同様のものを実装する方法があるかどうかです。おそらく誰かが同じソリューションに対してより良いパターンを提案できるでしょうか? 「

fileprivate(set) var state: Property<State> 

答えて

4

私ができる

private(set) var state: Property<State> 

や拡張子からそれを変更した場合、それでも同じファイル:

+0

ええ、しかし、おそらくそれを怠惰にすることさえ良い解決策になるでしょう。しかし、あなたも間違いなく理にかなっています。 – iyuna

1

あなたが状態を変異させたい場合は、あなたがのいずれかを実行しようとすることができによっては1つのプロパティでこれを行う方法はないと思います。

class Foo { 
    let state: Property<State> 

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

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

ええ、私はこのことについて考えた:あなたのコードに私はなるだろう唯一の調整はstate保存されたプロパティではなく、新たにそれがアクセスするたびに作成される計算されたプロパティを作ることです。しかし、これは私自身が 'state'プロパティを変更することを可能にします。そして 'state'プロパティの値を変更する必要があります。私は 'ReactiveSwift.Property'と' ReactiveSwift.MutableProperty'がプロパティ 'value'を持っていることを意味します。それが私が修正する必要があるものです。混乱させて申し訳ありません。 – iyuna

関連する問題