2017-09-18 5 views
1

1つのViewModelから別のViewModelにSignalを送信しようとしています。基本的には、2番目のViewModelに最初のViewModelと同じSignalを使用したいが、2番目のViewModelのinit状態で初期値が必要である。これまでのところ私はSignal<Person, NoError>Personというモデルを送ってこれを解決することができました。ReactiveCocoaを使用して、初期値のSignalを正しく送信する方法は?

struct Person { 
    let name: String 
    let age: Int 
} 

PersonListViewModelの信号は、ストリームが処理され、出力として定義されます。

protocol PersonListViewModelOutputs { 
    var goToPersonDetail: Signal<Person, NoError> { get } 
} 

PersonDetailViewModel

protocol PersonDetailViewModelInputs { 
    func viewDidLoad() 
    func configureWith(personSignal: Signal<Person, NoError>, initialPerson: Person) 
} 

protocol PersonDetailViewModelOutputs { 
    var person: Signal<Person, NoError> { get } 
} 

protocol PersonDetailViewModelType { 
    var inputs: PersonDetailViewModelInputs { get } 
    var outputs: PersonDetailViewModelOutputs { get } 
} 


public final class PersonDetailViewModel: PersonDetailViewModelType, PersonDetailViewModelInputs, PersonDetailViewModelOutputs { 

    init(){ 
     self.person = self.configureWithPersonPropery.signal.skipNil() 
    } 

    private let configureWithPersonProperty = MutableProperty<Person?>(nil) 
    func configureWith(personSignal: Signal<Person, NoError>, initialPerson: Person) { 
     configureWithPersonProperty.value = initialPerson 
     configureWithPersonProperty <~ personSignal.producer 
    } 
} 

しかし、この解決策はfunc configureWith(...)内の不要なパラメータを持っているようだと私はそれを解決するためのより良い方法があるかもしれませんね。

例えば、Person Structを送信せずに最後に放出された値をpersonSignal: Signal<Person, NoError>func configureWith(...)から得ることは可能ですか?

答えて

1

信号がNoErrorなので、Signalの代わりにPropertyインスタンスを渡すことができます。プロパティは、基本的には値を持つことが保証されており、エラーを送信することはできません。初期値と既存の信号で作成することができます:

let prop = Property(initial: initialPerson, then: signal) 
+0

私が探していたものです。ありがとうございました! –

関連する問題